windons udp通信

1.服务器端代码:

#include
#include
#include
#include
using namespace std;
#pragma comment(lib,"ws2_32.lib")
#define BUFFER_SIZE 1024
int main() {
	WSADATA WSAData;
	char receBuf[BUFFER_SIZE];
	char Response[] = "";
	if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0) {
		printf("初始化失败");
		exit(1);
	}
	SOCKET sockServer = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (sockServer == INVALID_SOCKET)
	{
		printf("Failed socket() \n");
		return 0;
	}
	SOCKADDR_IN addr_Server; //服务器的地址等信息
	addr_Server.sin_family = AF_INET;
	addr_Server.sin_port = htons(4567);
	addr_Server.sin_addr.S_un.S_addr = INADDR_ANY;
	if (bind(sockServer, (SOCKADDR*)&addr_Server, sizeof(addr_Server)) == SOCKET_ERROR) {//服务器与本地地址绑定
		printf("Failed socket() %d \n", WSAGetLastError());
		return 0;
	}
	SOCKADDR_IN addr_Clt;

	int fromlen = sizeof(SOCKADDR);
	while (true) {
		int last = recvfrom(sockServer, receBuf, 1024, 0, (SOCKADDR*)&addr_Clt, &fromlen);
		if (last > 0) {      //判断接收到的数据是否为空
			receBuf[last] = '\0';//给字符数组加一个'\0',表示结束了。不然输出有乱码
			if (strcmp(receBuf, "bye") == 0) {
				cout << "                             客户端不跟我聊天了..." << endl;
				closesocket(sockServer);
				return 0;
			}
			else {
				printf("接收到数据(%s):%s\n", inet_ntoa(addr_Clt.sin_addr), receBuf);
			}
		}
		//cout << "回复客户端消息:";
		//cin >> Response; //给客户端回复消息
		//sendto(sockServer, Response, strlen(Response), 0, (SOCKADDR*)&addr_Clt, sizeof(SOCKADDR));
	}

	closesocket(sockServer);

	WSACleanup();
	return 0;
}

2客户端代码

#include
#include
#include
#include
using namespace std;
#pragma comment(lib,"ws2_32.lib")
# define BUFFER_SIZE  1024    //缓冲区大小
int main(){
    SOCKET sock_Client; //客户端用于通信的Socket
    WSADATA WSAData;
    char  receBuf[BUFFER_SIZE]; //发送数据的缓冲区
    char  sendBuf[BUFFER_SIZE]; //接受数据的缓冲区

    if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){
    printf("初始化失败!");
    return -1;
    }    //初始化
    sock_Client=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);//创建客户端用于通信的Socket
    SOCKADDR_IN addr_server;   //服务器的地址数据结构
    addr_server.sin_family=AF_INET;
    addr_server.sin_port=htons(4567);//端口号为4567
    addr_server.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");   //127.0.0.1为本电脑IP地址
    SOCKADDR_IN sock;
    int len=sizeof(sock);
    while(true){
        cout<<"请输入要传送的数据:";
        cin>>sendBuf;  
        sendto(sock_Client,sendBuf,strlen(sendBuf),0,(SOCKADDR*)&addr_server,sizeof(SOCKADDR));
        //int last=recv(sock_Client, receBuf, strlen(receBuf), 0);              // (调用recv和recvfrom都可以)
        int last=recvfrom(sock_Client,receBuf,strlen(receBuf),0,(SOCKADDR*)&sock,&len);
            if(last>0){
             receBuf[last]='\0';      //给字符数组加一个'\0',表示结束了。不然输出有乱码
                if(strcmp(receBuf,"bye")==0){
                       cout<<"                               服务器不跟我聊天了..."<

你可能感兴趣的:(udp,网络协议,网络)