winsocket编程_UDP(c++)

UDP-SERVER端代码:

#include <WinSock2.h>
#include <iostream>

using namespace std;

void main()
{
	//加载套接字,调用WSAStartup()
	WORD wVersionRequested;
	wVersionRequested=MAKEWORD(2,2);
	WSADATA wsaData;
	int err;

	err=WSAStartup(wVersionRequested,&wsaData);
	if(err!=0){
		return;
	}

	if(LOBYTE(wsaData.wVersion)!=2||
		HIBYTE(wsaData.wVersion)!=2){
			WSACleanup();
			return;
	}

	//调用socket函数创建套接字
	SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
	//调用bind函数,将套接字在本地一个地址和端口上进行绑定
	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 接收数据 区别:TCP是调用recv函数

	SOCKADDR_IN addrClient;
	char recvbuf[100];
	int len=sizeof(SOCKADDR);
	recvfrom(sockSrv,recvbuf,100,0,(SOCKADDR*)&addrClient,&len);
	cout<<"来自客户端的消息:"<<recvbuf<<endl;

	closesocket(sockSrv);//关闭套接字,释放给这个套接字分配的资源
	WSACleanup();//终止对套接字库的使用

}

UDP-CLIENT端代码:

#include <WinSock2.h>
#include <iostream>

using namespace std;

void main()
{
	//加载套接字库
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested=MAKEWORD(2,2);

	err=WSAStartup(wVersionRequested,&wsaData);

	if(err!=0){
		return;
	}
	if(HIBYTE(wsaData.wVersion)!=2||
		LOBYTE(wsaData.wVersion)!=2){
			WSACleanup();
			return;
	}

	//创建套接字
	SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
	//发送数据,调用sendto函数
	
	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);
	sendto(sockClient,"Hello!",strlen("Hello!")+1,0,(SOCKADDR*)&addrSrv,len);

	closesocket(sockClient);
	WSACleanup();

}

猜你喜欢

转载自blog.csdn.net/qq_43633973/article/details/89341087