代码来源:《Windows网络编程》(罗莉琴,詹祖桥 主编)(如造成任何不便,请联系我删除)
服务器端:
// UdpServer.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
SOCKET RecvSocket;
sockaddr_in RecvAddr;
int Port = 27015;
char RecvBuf[1024];
int BufLen = 1024;
sockaddr_in SenderAddr;
int SenderAddrSize = sizeof(SenderAddr);
//初始化Winsock
WSAStartup(MAKEWORD(2,2),&wsaData);
//创建接收数据报的Socket
RecvSocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Port);
RecvAddr.sin_addr.S_un.S_addr = inet_addr("ip地址");//htonl(INADDR_ANY);
bind(RecvSocket,(SOCKADDR *)&RecvAddr,sizeof(RecvAddr));
//调用recvfrom函数,在绑定的Socket上接收数据
printf("Recving datagram ...\n");
recvfrom(RecvSocket,RecvBuf,BufLen,0,(SOCKADDR *)&SenderAddr,&SenderAddrSize);
printf(RecvBuf);
printf("\n");
//关闭Socket,结束接收数据
printf("Finished receiving.Close socket.\n");
closesocket(RecvSocket);
WSACleanup();
system("pause");
return 0;
}
客户端:
// UdpClient.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <WINSOCK2.H>
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
SOCKET SendSocket;
sockaddr_in RecvAddr;
int Port = 27015;
char SendBuf[1024];
int BufLen = 1024;
strcpy_s(SendBuf,"hello!");
//初始化Socket
WSAStartup(MAKEWORD(2,2),&wsaData);
//创建Socket对象
SendSocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
//设置服务器地址
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Port);
RecvAddr.sin_addr.S_un.S_addr = inet_addr("ip地址");
//向服务器发送数据
printf("Sending a datagram to the receiver...\n");
sendto(SendSocket,SendBuf,BufLen,0,(SOCKADDR *)&RecvAddr,sizeof(RecvAddr));
//发送完成
printf("Finished sending.Close socket.\n");
closesocket(SendSocket);
WSACleanup();
system("pause");
return 0;
}