当前位置: 首页 > Linux

《Linux网络开发必学教程》16_深入UDP数据收发(上)

时间:2023-04-07 03:05:51 Linux

闂細濡備綍鍙戦€佷竴瀵瑰鐨刄DP鏁版嵁锛烾DP閫氫俊涓殑骞挎挱骞挎挱鏄竴绉嶅悜鍚屼竴缃戠粶涓殑鎵€鏈変富鏈轰紶杈撴暟鎹殑鏂规硶骞挎挱绫诲瀷鐩存帴骞挎挱锛欼P鍦板潃涓櫎缃戠粶鍦板潃澶栵紝鍏朵綑涓绘満鍦板潃閮借缃负1鏈湴骞挎挱锛氫笉闇€瑕佺煡閬撶綉缁滐紝浣跨敤255.255.255.255浣滀负IP鍦板潃鐨勫尯鍒娇鐢ㄣ€傛湰鍦板箍鎾暟鎹洿鎺ュ彂閫佸埌鏈湴涓绘満锛屾棤闇€璺敱鍣ㄥ鍧€銆傛湰鍦板箍鎾簲鐢ㄦ渚嬶細DHCPDHCP锛圖ynamicHostConfigurationProtocol锛夋槸涓€绉嶅眬鍩熺綉缃戠粶鍗忚锛堝熀浜嶶DP鍗忚锛夈€傛湰鍦颁富鏈哄彲浠ヨ嚜鍔ㄨ幏鍙栨湇鍔″櫒鍒嗛厤鐨処P銆傚湴鍧€鍜屽瓙缃戞帺鐮丏HCP閲囩敤瀹㈡埛/鏈嶅姟鍣ㄦā鍨嬶紝鍦板潃鐨勫姩鎬佸垎閰嶇敱缃戠粶涓绘満椹卞姩銆傚伐浣滄柟寮忥細褰揇HCP鏈嶅姟鍣ㄦ敹鍒扮綉缁滀富鏈虹殑鍦板潃鐢宠鍚庯紝浼氬悜缃戠粶涓绘満鍙戦€佺浉鍏崇殑鍦板潃閰嶇疆淇℃伅锛屽疄鐜扮綉缁滀富鏈哄湴鍧€淇℃伅鐨勫姩鎬侀厤缃噯澶囸煈塖ocket灞炴€ц缃紙鍙€夛級socket鐨勬湰璐ㄦ槸涓€涓瘑鍒湰鍦扮綉缁滆祫婧愩€係ocket鏈韩鏈夊悇绉嶅睘鎬э紙涓嶅悓鐨勮繛鎺ワ紝灞炴€у彲鑳戒笉鍚岋級閫氳繃setsockopt()/getsockopt()鍙互璁块棶鍒版寚瀹歴ocket鐨勫睘鎬у€笺€傚鎺ュ瓧灞炴€х殑鏀瑰彉浼氬紩璧峰鎺ュ瓧鏁版嵁鍙戦€佸拰鎺ユ敹琛屼负鐨勬敼鍙樸€俆CP缂栫▼setsockopt()/getsockopt()灞炴€ц闂嚱鏁颁腑璁捐鐨勭敤娉?socklen_toptlen);intgetsockopt(intsockfd,intlevel,intoptname,void*optval,socklen_t*optlen);濡傛灉娌℃湁閿欒杩斿洖0锛涘惁鍒欒繑鍥濻OCKET_ERROR銆俇DP鏁版嵁骞挎挱intsock=socket(PF_INET,SOCK_DGRAM,0);intbrd=1;//骞挎挱閫夐」鏍囧織//...//...setsockopt(sock,SOL_SOCKET,SO_BROADCAST,0,&brd,sizeof(brd));缂栧啓绋嬪簭瀹為獙锛歎DP鏁版嵁骞挎挱server.c#include#include#include#include#include#include#includeintmain(){int鏈嶅姟鍣?0;缁撴瀯sockaddr_insaddr={0};int瀹㈡埛=0;缁撴瀯sockaddr_in杩滅▼={0};socklen_t澶у皬=0;int闀垮害=0;瀛楃buf[32]={0};鏁存暟r=0;鏈嶅姟鍣?濂楁帴瀛楋紙PF_INET锛孲OCK_DGRAM锛?锛夛紱if(server==-1){printf("鏈嶅姟鍣ㄥ鎺ュ瓧閿欒");杩斿洖-1锛泒saddr.sin_family=AF_INET;saddr.sin_addr.s_addr=htonl(INADDR_ANY);saddr.sin_port=htons(8888);if(bind(server,(structsockaddr*)&saddr,sizeof(saddr))==-1){printf("udp鏈嶅姟鍣ㄧ粦瀹氶敊璇痋n");杩斿洖-1锛泒printf("浣燿p鏈嶅姟鍣ㄥ惎鍔ㄦ垚鍔焅n");while(1){len=sizeof(remote);r=recvfrom(server,buf,sizeof(buf),0,(structsockaddr*)&remote,&len);if(r>0){buf[r]=0;printf("Recvive:%s\n",buf);}else{break;}}close(server);杩斿洖0;}client.c#include#include#include#include#include#include#includeintmain(){intsock=0;structsockaddr_inaddr={0};structsockaddr_inremote={0};socklen_tlen=0;charbuf[128]="D.T.Software";intr=0;intbrd=1;sock=socket(PF_INET,SOCK_DGRAM,0);if(sock==-1){printf("socketerror\n");return-1;}addr.sin_family=AF_INET;addr.sin_addr.s_addr=htonl(INADDR_ANY);addr.sin_port=h鍚紙7777锛夛紱if(bind(sock,(structsockaddr*)&addr,sizeof(addr))==-1){printf("udp缁戝畾閿欒\n");杩斿洖-1锛泒remote.sin_family=AF_INET;remote.sin_addr.s_addr=0xFFFFFFFF锛?/remote.sin_addr.s_addr=inet_addr("192.168.2.255");remote.sin_port=htons(8888);setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&brd,sizeof(brd));while(1){len=sizeof(杩滅▼);r=strlen(buf);sendto(sock,buf,r,0,(structsockaddr*)&remote,len);鐫¤锛?锛夛紱}鍏抽棴锛堣瀛愶級锛況eturn0;}Output:udpserverstartsucessRecvive:D.T.SoftwareRecvive:D.T.Software鎬濊€冿細UDP杩樻湁鍏朵粬鐨勪竴瀵瑰鏁版嵁鍙戦€佹柟寮忓悧锛?/p>

最新推荐
猜你喜欢