与上一篇文章类似,在本文中,将以打电话的例子生动活泼的解释基于UDP协议的socket编程。
在基于UDP的socket编程中。首先介绍基本的步骤:
对于服务器端的步骤如下:
1. 加载套接字库(买手机);//WSAStartup()函数
2. 绑定到本地主机和特定的端口(与某人绑定并且要让想给你打电话的人知道)//bind()
3. 接收数据(接收电话);//recvfrom()
对于客户端的步骤:
1. 加载套接字库(买手机);//WSAStartup()
2. 发送数据(不用让别人知道你的号码,就可以给特定的人打电话)给服务器//sendto()
同样一下是一个实例://另外要注意的是要加载动态链接库Ws2_32.lib.
1. 服务器端的代码:
#include <iostream.h>
#include <WINSOCK2.H>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
char recvBuffer[100];
int len=100;
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
recvfrom(sockSrv,recvBuffer,len,0,(SOCKADDR*)&addrSrv,&len);
cout<<recvBuffer<<endl;
closesocket(sockSrv);
WSACleanup();
}
2. 客户端的代码:
#include <iostream.h>
#include <WINSOCK2.H>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
char sendBuffer[100];
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
int len=sizeof(SOCKADDR_IN);
sendto(sockClient,"hello",sizeof("hello"),0,(SOCKADDR*)&addrSrv,len);
closesocket(sockClient);
WSACleanup();
}