1、 无连接编程(对等编程UDP)
UDP编程流程
① UDP套接字创建(socket)
② 地址与端口的绑定(bind)
③ 数据收发 (sendto\recvfrom)
④ 套接字关闭 (close)
CLIENT;
#include <iostream>
#include <windows.h>
using namespace std;
#pragma comment (lib,"ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
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 ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
/* The WinSock DLL is acceptable. Proceed. */
SOCKET sockCli;
sockCli = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSer,addrCli;
addrCli.sin_family = AF_INET;
addrCli.sin_port = htons(5050);
addrCli.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
char sendBuf[256];
char recvBuf[256];
int len = sizeof(SOCKADDR);
while(1)
{
cout<<"Cli :> ";
cin>>sendBuf;
sendto(sockCli,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrCli,sizeof(SOCKADDR));
recvfrom(sockCli,recvBuf,256,0,(SOCKADDR*)&addrCli,&len);
cout<<"Ser :> "<<recvBuf<<endl;
}
closesocket(sockCli);
WSACleanup();
}
SERVER:
#include <iostream>
#include <windows.h>
using namespace std;
#pragma comment (lib,"ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
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 ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
/* The WinSock DLL is acceptable. Proceed. */
SOCKET sockSer;
sockSer = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSer,addrCli;
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(5050);
addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
bind(sockSer,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));
char sendBuf[256];
char recvBuf[256];
int len = sizeof(SOCKADDR);
while(1)
{
recvfrom(sockSer,recvBuf,256,0,(SOCKADDR*)&addrCli,&len);
cout<<"Cli :> "<<recvBuf<<endl;
cout<<"Ser :> ";
cin>>sendBuf;
sendto(sockSer,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrCli,sizeof(SOCKADDR));
}
closesocket(sockSer);
WSACleanup();
}