UDP(User Datagram Protocol) 用户数据报协议
不保障可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据
服务端
void main(){
err = WSAStartup(versionRequest, &wsaData);
if(err != 0 ){
printf("ERROR!");
return;
}
//check whether the version is 1.1, if not print the error and cleanup wsa?
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
printf("WRONG WINSOCK VERSION!");
WSACleanup();
return;
}
SOCKET socServer = socket(AF_INET, SOCK_DGRAM,0);
SOCKADDR_IN addr_Srv;
addr_Srv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addr_Srv.sin_family = AF_INET;
addr_Srv.sin_port = htons(HOST_PORT);
//bind socket to the host
bind(socServer,( SOCKADDR*) &addr_Srv, sizeof(SOCKADDR));
//address of a client
SOCKADDR_IN addr_Clt;
char recvBuf[100];
int fromlen = sizeof(SOCKADDR);
// while() to listen all the time
while(true){
//receive data function of server
recvfrom(socServer, recvBuf, 100, 0, (SOCKADDR*) &addr_Clt, &fromlen);
//output the data received to cmd
std::cout<<recvBuf<<std::endl;
//send "OK" to the from_client to indicates that data have been received.
//send function is used by server, while sendto function is used by client. NOT sure.
// send(addr_Clt, OK_STR, strlen(OK_STR)+1, 0);
sendto(socServer, OK_STR, strlen(OK_STR)+1, 0, (SOCKADDR*)&addr_Clt, sizeof(SOCKADDR));
}
// at last close the socket.
closesocket(socServer);
//cleanup WSAData
WSACleanup();}
客户端
void main()
{
int length=0;
SOCKET socket1;
PointIndex point;
InitWinsock();
struct sockaddr_in server;
int len =sizeof(server);
server.sin_family=AF_INET;
server.sin_port=htons(1000); ///server的监听端口
server.sin_addr.s_addr=inet_addr("192.168.1.102"); ///server的地址
socket1=socket(AF_INET,SOCK_DGRAM,0);
while (1)
{
point.firstDemension=1;
point.secondDemension=2;
point.thirdDemension=3;
point.forthDemension=4;
point.value=0;
strcpy(point.fileName,"test");
PointIndex *ppoint = &point;
length=sizeof(PointIndex);
char *buffer = (char*)(ppoint);
printf("Send message : ");
gets(buffer);
if (sendto(socket1,buffer,length,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)
{
if (recvfrom(socket1,buffer,length,0,(struct sockaddr*)&server,&len)!=SOCKET_ERROR)
printf("Recieve message : %s\n",buffer);
}
}
closesocket(socket1);
}