1. UDP通信过程
2. 服务器端
- 创建套接字绑定端口
(1)调用socket(),分配文件描述符,即监听套接字
(2)调用bind(),将套接字与本地IP地址和端口绑定 - 数据交互阶段
(1)调用recvfrom()接受消息
(2)调用sendto()发送消息 - 关闭阶段
(1)调用colse()关闭套接字
创建服务器端(c++实现)
头文件
#include <WinSock.h>
#include <stdio.h>
//链接器
odbc32.lib;odbccp32.lib;ws2_32.lib;
//加载套接字库
WORD wVersionRequested; //指定加载winsock版本高字节为副版本,低字节为主版本
WSAData wsaData;
int Error;
wVersionRequested=MAKEWORD(1,1); //第一个为高字节,第二个为低字节
Error=WSAStartup(wVersionRequested,&wsaData); //加载套接字库
if (Error!=0)
{
return;
}
if (LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
printf("Could not find a usable version of Winsock.dll\n");
WSACleanup();
return;
}
//创建套接字
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
//绑定套接字到6000端口
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));
//接受客户端数据
while(1)
{
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
char recvBuf[100];
printf("正在等待接受客户端数据\n");
recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len); //会一直等到 接受到数据 才会执行下一条语句
printf("%s\n", recvBuf);
}
//关闭套接字
closesocket(sockSrv);
//释放套接字库资源
WSACleanup();
3. 客户区端
- 创建套接字
(1)调用socket(),分配文件描述符,即监听套接字 - 数据交互阶段
(1)调用recvfrom()接受消息
(2)调用sendto()发送消息 - 关闭阶段
(1)调用colse()关闭套接字
创建客户端(c++实现)
头文件
#include <WinSock.h>
#include <stdio.h>
//链接器
odbc32.lib;odbccp32.lib;ws2_32.lib;
//加载套接字库
WORD wVersionRequested; //指定加载winsock版本高字节为副版本,低字节为主版本
WSAData wsaData;
int Error;
wVersionRequested=MAKEWORD(1,1); //第一个为高字节,第二个为低字节
Error=WSAStartup(wVersionRequested,&wsaData); //加载套接字库
if (Error!=0)
{
return;
}
if (LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
printf("Could not find a usable version of Winsock.dll\n");
WSACleanup();
return;
}
//创建套接字
SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
//发送数据
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);
char strMsg[100];
while (1)
{
scanf("%s",&strMsg);
sendto(sockClient, strMsg, strlen(strMsg) + 1, 0, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
printf("向服务器端发送数据完毕:%s 成功\n",strMsg);
}
//关闭套接字
closesocket(sockClient);
//释放套接字库资源
WSACleanup();