UDP Socket编程 C/C++实现 (Windows Platform SDK)
生活随笔
收集整理的這篇文章主要介紹了
UDP Socket编程 C/C++实现 (Windows Platform SDK)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
挺無聊一小程序,倆SB一人說一句,據(jù)說聊天程序最好用UDP寫。 Server:
[csharp]?view plaincopy #pragma?comment?(lib,"ws2_32.lib")?? ? #include?<Winsock2.h>?? ? #include?<stdio.h>?? ?? ?? ?? void?main()?? ?? {?? ?? ????//版本協(xié)商?? ?? ????WORD?wVersionRequested;?? ?? ????WSADATA?wsaData;?? ?? ????int?err;?? ?? ?????? ?? ????wVersionRequested?=?MAKEWORD(?1,?1?);?? ?? ?????? ?? ????err?=?WSAStartup(?wVersionRequested,?&wsaData?);?? ?? ????if?(?err?!=?0?)?{?? ?? ????????/*?Tell?the?user?that?we?could?not?find?a?usable?*/?? ?? ????????/*?WinSock?DLL.??????????????????????????????????*/?? ?? ????????return;?? ?? ????}?? ?? ?????? ?? ????/*?Confirm?that?the?WinSock?DLL?supports?2.2.*/?? ?? ????/*?Note?that?if?the?DLL?supports?versions?greater????*/?? ?? ????/*?than?2.2?in?addition?to?2.2,?it?will?still?return?*/?? ?? ????/*?2.2?in?wVersion?since?that?is?the?version?we??????*/?? ?? ????/*?requested.????????????????????????????????????????*/?? ?? ?????? ?? ????if?(?LOBYTE(?wsaData.wVersion?)?!=?1?||?? ?? ????????HIBYTE(?wsaData.wVersion?)?!=?1)?{?? ?? ????????/*?Tell?the?user?that?we?could?not?find?a?usable?*/?? ?? ????????/*?WinSock?DLL.??????????????????????????????????*/?? ?? ????????WSACleanup(?);?? ?? ????????return;??? ?? ????}?? ?? ?????? ?? ????/*?The?WinSock?DLL?is?acceptable.?Proceed.?*/?? ?? ????//創(chuàng)建數(shù)據(jù)報(bào)套接字?? ?? ????SOCKET?svr?=?socket(AF_INET,SOCK_DGRAM,0);?? ?? ????//創(chuàng)建本地地址信息?? ?? ????SOCKADDR_IN?addr;?? ?? ????addr.sin_family?=?AF_INET;?? ?? ????addr.sin_port?=?htons(6000);?? ?? ????addr.sin_addr.S_un.S_addr?=?htonl(INADDR_ANY);?? ?? ????int?len?=?sizeof(sockaddr);?? ?? ????bind(svr,(sockaddr*)&addr,len);?? ?? ????//創(chuàng)建客戶端地址對象?? ?? ????SOCKADDR_IN?addrClient;?? ?? ????char?recvBuf[128];?? ?? ????char?sendBuf[128];?? ?? ????char?tempBuf[256];?? ?? ?????? ?? ????while(true)?? ?? ????{?? ?? ????????//接收數(shù)據(jù)?? ?? ????????recvfrom(svr,recvBuf,128,0,(sockaddr*)&addrClient,&len);?? ?? ????????char*?ipClient?=?inet_ntoa(addrClient.sin_addr);?? ?? ????????sprintf(tempBuf,"%s?said:?%s/n",ipClient,recvBuf);?? ?? ????????printf("%s",tempBuf);?? ?? ????????gets(sendBuf);?? ?? ????????//發(fā)送數(shù)據(jù)?? ?? ????????sendto(svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrClient,len);?? ?? ????}?? ?? ????closesocket(svr);?? ?? ????WSACleanup();?? ?? }??
Client:
[csharp]?view plaincopy #pragma?comment?(lib,"ws2_32.lib")?? ? #include?<Winsock2.h>?? ? #include?<stdio.h>?? ?? ?? ?? void?main()?? ?? {?? ?? ????//版本協(xié)商?? ?? ????WORD?wVersionRequested;?? ?? ????WSADATA?wsaData;?? ?? ????int?err;?? ?? ?????? ?? ????wVersionRequested?=?MAKEWORD(?1,?1?);?? ?? ?????? ?? ????err?=?WSAStartup(?wVersionRequested,?&wsaData?);?? ?? ????if?(?err?!=?0?)?{?? ?? ????????/*?Tell?the?user?that?we?could?not?find?a?usable?*/?? ?? ????????/*?WinSock?DLL.??????????????????????????????????*/?? ?? ????????return;?? ?? ????}?? ?? ?????? ?? ????/*?Confirm?that?the?WinSock?DLL?supports?2.2.*/?? ?? ????/*?Note?that?if?the?DLL?supports?versions?greater????*/?? ?? ????/*?than?2.2?in?addition?to?2.2,?it?will?still?return?*/?? ?? ????/*?2.2?in?wVersion?since?that?is?the?version?we??????*/?? ?? ????/*?requested.????????????????????????????????????????*/?? ?? ?????? ?? ????if?(?LOBYTE(?wsaData.wVersion?)?!=?1?||?? ?? ????????HIBYTE(?wsaData.wVersion?)?!=?1?)?{?? ?? ????????/*?Tell?the?user?that?we?could?not?find?a?usable?*/?? ?? ????????/*?WinSock?DLL.??????????????????????????????????*/?? ?? ????????WSACleanup(?);?? ?? ????????return;??? ?? ????}?? ?? ?????? ?? ????/*?The?WinSock?DLL?is?acceptable.?Proceed.?*/?? ?? ????//創(chuàng)建服務(wù)器套接字?? ?? ????SOCKET?Svr?=?socket(AF_INET,SOCK_DGRAM,0);?? ?? ????//創(chuàng)建地址?? ?? ????SOCKADDR_IN?addrSvr;?? ?? ????addrSvr.sin_family?=?AF_INET;?? ?? ????addrSvr.sin_port?=?htons(6000);?? ?? ????addrSvr.sin_addr.S_un.S_addr?=?inet_addr("127.0.0.1");?? ?? ????char?recvBuf[128];?? ?? ????char?sendBuf[128];?? ?? ????int?len?=?sizeof(sockaddr);?? ?? ?? ?? ????while(true)?? ?? ????{?? ?? ????????gets(sendBuf);?? ?? ????????//發(fā)送數(shù)據(jù)?? ?? ????????sendto(Svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrSvr,len);?? ?? ????????//接收數(shù)據(jù)?? ?? ????????recvfrom(Svr,recvBuf,128,0,(sockaddr*)&addrSvr,&len);?? ?? ????????char*?ipSvr?=?inet_ntoa(addrSvr.sin_addr);?? ?? ????????printf("%s?said:?%s/n",ipSvr,recvBuf);?? ?? ????}?? ?? ????closesocket(Svr);?? ?? ????WSACleanup();?? ?? } ?
總結(jié)
以上是生活随笔為你收集整理的UDP Socket编程 C/C++实现 (Windows Platform SDK)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UDP sendto和recvfrom使
- 下一篇: 在MFC,Win32程序中向控制台(Co