有关UDP方式的socket网络通信的编程
以下代码都能编译通过
1. 客户端代码
#include <WinSock2.h>
#include <stdio.h>
#include <iostream>
using namespace std;
void main()
{
//加载套接字
WORD wVersionRequest;
WSADATA wsadata;
int err;
wVersionRequest=MAKEWORD(1,1);
err=WSAStartup(wVersionRequest,&wsadata);
if(err!=0)
{
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);
sendto(sockClient,"Hello",strlen("Hello")+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //单独发送一条信息
closesocket(sockClient);
WSACleanup();
//cout<<"hello world!"<<endl;
}
- 服务端代码
#include <WinSock2.h>
#include <stdio.h>
#include <iostream>
using namespace std;
void main()
{
WORD wVersionRequest;
WSADATA wsadata;
int err;
wVersionRequest=MAKEWORD(1,1);
err=WSAStartup(wVersionRequest,&wsadata);
if(err!=0)
return;
if(LOBYTE(wsadata.wVersion)!=1||HIBYTE(wsadata.wVersion)!=1) //取低八位和高八位
{
WSACleanup(); //释放为该应用程式分配的资源
return;
}
SOCKET sockSrc=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //套接字的主机IP 本函数将一个32位数从主机字节顺序转换成网络字节顺序
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrc,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //服务器端要绑定
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100];
recvfrom(sockSrc,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf("%s\n",recvBuf);
closesocket(sockSrc);
WSACleanup();
}
//UDP使用的是sendto 和 recvfrom
//TCP使用的是send 和recv
注意:服务端要先启动!
执行效果如下图: