遍匈 / socket園殻 /

児噐UDP議捲暦匂極才人薩極

<貧匯准 和匯准>
念中議猟嫗嶄厘断公竃阻叱倖TCP議箭徨?斤噐UDP遇冱?峪勣嬬尖盾念中議坪否?糞孖旺掲佃並。

UDP嶄議捲暦匂極才人薩極短嗤銭俊

UDP音崧TCP?涙俶壓銭俊彜蓑和住算方象?咀緩児噐UDP議捲暦匂極才人薩極匆涙俶将狛銭俊狛殻。匆祥頁傍?音駅距喘 listen() 才 accept() 痕方。UDP嶄峪嗤幹秀耗俊忖議狛殻才方象住算議狛殻。

UDP捲暦匂極才人薩極譲峪俶1倖耗俊忖

TCP嶄?耗俊忖頁匯斤匯議購狼。泌勣?10倖人薩極戻工捲暦?椎担茅阻減夭酌油議耗俊忖翌?珊俶勣幹秀10耗俊忖。徽壓UDP嶄?音砿頁捲暦匂極珊頁人薩極脅峪俶勣1倖耗俊忖。岻念盾瞥UDP圻尖議扮昨訟阻喨篠淫骨議箭徨?減夭喨篠淫骨議酔弓巷望辛參曳囓葎UDP耗俊忖?峪勣嗤1倖酔弓巷望?祥辛參宥狛万?販吭仇峽喨篠淫骨。揖劔?峪俶1倖UDP耗俊忖祥辛參?販吭麼字勧僕方象。

児噐UDP議俊辺才窟僕痕方

幹秀挫TCP耗俊忖朔?勧補方象扮涙俶壅耶紗仇峽佚連?咀葎TCP耗俊忖繍隠隔嚥斤圭耗俊忖議銭俊。算冱岻?TCP耗俊忖岑祇朕炎仇峽佚連。徽UDP耗俊忖音氏隠隔銭俊彜蓑?耽肝勧補方象脅勣耶紗朕炎仇峽佚連?宸屢輝噐壓喨篠淫骨念野亟辺周繁仇峽。

窟僕方象聞喘 sendto() 痕方?
ssize_t sendto(int sock, void *buf, size_t nbytes, int flags, struct sockaddr *to, socklen_t addrlen); //Linux
int sendto(SOCKET sock, const char *buf, int nbytes, int flags, const struct sockadr *to, int addrlen); //Windows
Linux才Windows和議 sendto() 痕方窃貌?和中頁峋聾歌方傍苧?
  • sock?喘噐勧補UDP方象議耗俊忖?
  • buf?隠贋棋勧補方象議産喝曝仇峽?
  • nbytes?揮勧補方象議海業?參忖准柴??
  • flags?辛僉?歌方?飛短嗤辛勧弓0?
  • to?贋嗤朕炎仇峽佚連議 sockaddr 潤更悶延楚議仇峽?
  • addrlen?勧弓公歌方 to 議仇峽峙潤更悶延楚議海業。

UDP 窟僕痕方 sendto() 嚥TCP窟僕痕方 write()/send() 議恷寄曝艶壓噐?sendto() 痕方俶勣?麿勧弓朕炎仇峽佚連。

俊辺方象聞喘 recvfrom() 痕方?
ssize_t recvfrom(int sock, void *buf, size_t nbytes, int flags, struct sockadr *from, socklen_t *addrlen); //Linux
int recvfrom(SOCKET sock, char *buf, int nbytes, int flags, const struct sockaddr *from, int *addrlen); //Windows
喇噐UDP方象議窟僕極音音協?侭參 recvfrom() 痕方協吶葎辛俊辺窟僕極佚連議侘塀?醤悶歌方泌和?
  • sock?喘噐俊辺UDP方象議耗俊忖?
  • buf?隠贋俊辺方象議産喝曝仇峽?
  • nbytes?辛俊辺議恷寄忖准方?音嬬階狛buf産喝曝議寄弌??
  • flags?辛僉?歌方?飛短嗤辛勧弓0?
  • from?贋嗤窟僕極仇峽佚連議sockaddr潤更悶延楚議仇峽?
  • addrlen?隠贋歌方 from 議潤更悶延楚海業議延楚仇峽峙。

児噐UDP議指蕗捲暦匂極/人薩極

和中潤栽岻念議坪否糞孖指蕗人薩極。俶勣廣吭議頁?UDP音揖噐TCP?音贋壓萩箔銭俊才鞭尖狛殻?咀緩壓蝶嶽吭吶貧涙隈苧鳩曝蛍捲暦匂極才人薩極?峪頁咀葎凪戻工捲暦遇各葎捲暦匂極?錬李光了響宀音勣列盾。

和中公竃Windows和議旗鷹?Linux嚥緩窃貌?音壅弩峰。

捲暦匂極 server.cpp?
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib") //紗墮 ws2_32.dll
#define BUF_SIZE 100
int main(){
 WSADATA wsaData;
 WSAStartup( MAKEWORD(2, 2), &wsaData);
 //幹秀耗俊忖
 SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
 //鰯協耗俊忖
 sockaddr_in servAddr;
 memset(&servAddr, 0, sizeof(servAddr)); //耽倖忖准脅喘0野割
 servAddr.sin_family = PF_INET; //聞喘IPv4仇峽
 servAddr.sin_addr.s_addr = htonl(INADDR_ANY); //徭強資函IP仇峽
 servAddr.sin_port = htons(1234); //極笥
 bind(sock, (SOCKADDR*)&servAddr, sizeof(SOCKADDR));
 //俊辺人薩極萩箔
 SOCKADDR clntAddr; //人薩極仇峽佚連
 int nSize = sizeof(SOCKADDR);
 char buffer[BUF_SIZE]; //産喝曝
 while(1){
 int strLen = recvfrom(sock, buffer, BUF_SIZE, 0, &clntAddr, &nSize);
 sendto(sock, buffer, strLen, 0, &clntAddr, nSize);
 }
 closesocket(sock);
 WSACleanup();
 return 0;
}
旗鷹傍苧?
1) 及12佩旗鷹壓幹秀耗俊忖扮?? socket() 及屈倖歌方勧弓 SOCK_DGRAM?參峺苧聞喘UDP亅咏。

2) 及18佩旗鷹嶄聞喘htonl(INADDR_ANY)栖徭強資函IP仇峽。

旋喘械方 INADDR_ANY 徭強資函IP仇峽嗤匯倖苧?垉頂担Γx擁乃曳躰騮苛圧銃篷蔯鯽馥濵鰌澤鯽馥?IP仇峽個延扮?音喘壅厚個坿鷹嶷仟園咎?匆音喘壓尼強罷周扮返強補秘。遇拝?泌惚匯岬柴麻字嶄厮蛍塘謹倖IP仇峽?箭泌揃喇匂??椎担峪勣極笥催匯崑?祥辛參貫音揖議IP仇峽俊辺方象。侭參?捲暦匂嶄單枠深打聞喘INADDR_ANY?遇人薩極嶄茅掲揮嗤匯何蛍捲暦匂孔嬬?倦夸音氏寡喘。

人薩極 client.cpp?
#include <stdio.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib") //紗墮 ws2_32.dll
#define BUF_SIZE 100
int main(){
 //兜兵晒DLL
 WSADATA wsaData;
 WSAStartup(MAKEWORD(2, 2), &wsaData);
 //幹秀耗俊忖
 SOCKET sock = socket(PF_INET, SOCK_DGRAM, 0);
 //捲暦匂仇峽佚連
 sockaddr_in servAddr;
 memset(&servAddr, 0, sizeof(servAddr)); //耽倖忖准脅喘0野割
 servAddr.sin_family = PF_INET;
 servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
 servAddr.sin_port = htons(1234);
 //音僅資函喘薩補秘旺窟僕公捲暦匂?隼朔俊鞭捲暦匂方象
 sockaddr fromAddr;
 int addrLen = sizeof(fromAddr);
 while(1){
 char buffer[BUF_SIZE] = {0};
 printf("Input a string: ");
 gets(buffer);
 sendto(sock, buffer, strlen(buffer), 0, (struct sockaddr*)&servAddr, sizeof(servAddr));
 int strLen = recvfrom(sock, buffer, BUF_SIZE, 0, &fromAddr, &addrLen);
 buffer[strLen] = 0;
 printf("Message form server: %s\n", buffer);
 }
 closesocket(sock);
 WSACleanup();
 return 0;
}
枠塰佩 server?壅塰佩 client?client 補竃潤惚葎?

Input a string: C囂冱嶄猟利
Message form server: C囂冱嶄猟利
Input a string: c.biancheng.net Founded in 2012
Message form server: c.biancheng.net Founded in 2012
Input a string:


貫旗鷹嶄辛參心竃?server.cpp 嶄短嗤聞喘 listen() 痕方?client.cpp 嶄匆短嗤聞喘 connect() 痕方?咀葎 UDP 音俶勣銭俊。
<貧匯准 和匯准>

AltStyle によって変換されたページ (->オリジナル) /