upd通信代码-windows版

1.服务端代码:

  1. #include <WinSock2.h>   
  2. #include <iostream>   
  3. #pragma comment(lib,"ws2_32.lib")   
  4. using namespace std;  
  5.   
  6. void main(){  
  7.   
  8.     //初始化SOCKET   
  9.     WORD wVersionRequested;  
  10.     WSADATA wsaData;  
  11.     int err;  
  12.   
  13.     wVersionRequested = MAKEWORD(1,1);  
  14.   
  15.     err = WSAStartup( wVersionRequested, &wsaData);  
  16.     if(err!=0){  
  17.         return;  
  18.     }  
  19.   
  20.     if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){  
  21.         WSACleanup();  
  22.         return;  
  23.     }  
  24.   
  25.     //设置SOCKET   
  26.     SOCKET server = socket(AF_INET,SOCK_DGRAM,0);  
  27.     SOCKADDR_IN addr;  
  28.     addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
  29.     addr.sin_family = AF_INET;  
  30.     addr.sin_port = htons(6000);  
  31.     //绑定服务器   
  32.     bind(server,(SOCKADDR*)&addr, sizeof(SOCKADDR));  
  33.   
  34.     char recvBuf[1024],sendBuf[1024],tempBuf[1024];  
  35.   
  36.     SOCKADDR_IN addrClient;  
  37.     INT len = sizeof(SOCKADDR);  
  38.   
  39.     sendto(server,"连接成功,请键入聊天消息",strlen("连接成功,请键入聊天消息")+1,0,(SOCKADDR*)&addrClient,len);  
  40.   
  41.     while(1){  
  42.   
  43.         //读取数据   
  44.         recvfrom(server,recvBuf,1000,0,(SOCKADDR*)&addrClient,&len);  
  45.   
  46.         cout<<recvBuf<<endl;  
  47.   
  48.         cout<<"夜末: ";  
  49.         cin>>sendBuf;  
  50.         sprintf(tempBuf,"夜末: %s",sendBuf);  
  51.         sendto(server,tempBuf,strlen(tempBuf)+1,0,(SOCKADDR*)&addrClient,len);  
  52.   
  53.     }  
  54.     closesocket(server);  
  55.     WSACleanup();  
  56. }  
#include <WinSock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;

void main(){

	//初始化SOCKET
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(1,1);

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

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

	//设置SOCKET
	SOCKET server = socket(AF_INET,SOCK_DGRAM,0);
	SOCKADDR_IN addr;
	addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	addr.sin_family = AF_INET;
	addr.sin_port = htons(6000);
	//绑定服务器
	bind(server,(SOCKADDR*)&addr, sizeof(SOCKADDR));

	char recvBuf[1024],sendBuf[1024],tempBuf[1024];

	SOCKADDR_IN addrClient;
	INT len = sizeof(SOCKADDR);

	sendto(server,"连接成功,请键入聊天消息",strlen("连接成功,请键入聊天消息")+1,0,(SOCKADDR*)&addrClient,len);

	while(1){

		//读取数据
		recvfrom(server,recvBuf,1000,0,(SOCKADDR*)&addrClient,&len);

		cout<<recvBuf<<endl;

		cout<<"夜末: ";
		cin>>sendBuf;
		sprintf(tempBuf,"夜末: %s",sendBuf);
		sendto(server,tempBuf,strlen(tempBuf)+1,0,(SOCKADDR*)&addrClient,len);

	}
	closesocket(server);
	WSACleanup();
}

2.客户端代码

  1. #include <WinSock2.h>   
  2. #include <iostream>   
  3. #pragma comment(lib,"ws2_32.lib")   
  4. using namespace std;  
  5.   
  6. void main(){  
  7.   
  8.     char ip[20],name[100];  
  9.   
  10.     cout<<"请输入服务器端IP地址:";  
  11.     cin>>ip;  
  12.   
  13.     cout<<"请输入名的昵称:";  
  14.     cin>>name;  
  15.   
  16.     WORD wVersionRequested;  
  17.     WSADATA wsaData;  
  18.     int err;  
  19.   
  20.     wVersionRequested = MAKEWORD(1,1);  
  21.   
  22.     err = WSAStartup( wVersionRequested, &wsaData);  
  23.     if(err!=0){  
  24.         return;  
  25.     }  
  26.   
  27.     if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){  
  28.         WSACleanup();  
  29.         return;  
  30.     }  
  31.   
  32.     SOCKET client = socket(AF_INET,SOCK_DGRAM,0);  
  33.     SOCKADDR_IN addr;  
  34.     addr.sin_addr.S_un.S_addr = inet_addr(ip);  
  35.     addr.sin_family = AF_INET;  
  36.     addr.sin_port = htons(6000);  
  37.   
  38.     char recvBuf[1024],sendBuf[1024],tempBuf[1024],nameBuf[1024];  
  39.     int len = sizeof(SOCKADDR);  
  40.   
  41.   
  42.     while(1){  
  43.   
  44.         sprintf(nameBuf,"%s: ",name);  
  45.         cout<<nameBuf;  
  46.   
  47.         //发送   
  48.         cin>>sendBuf;  
  49.         sprintf(tempBuf,"%s: %s",name,sendBuf);  
  50.         sendto(client,tempBuf,strlen(tempBuf)+1,0,(SOCKADDR*)&addr,len);  
  51.   
  52.         //读取   
  53.         recvfrom(client,recvBuf,1000,0,(SOCKADDR*)&addr,&len);  
  54.         cout<<recvBuf<<endl;  
  55.   
  56.     }  
  57. }  
以下是Windows下C++实现UDP收发广播信息的示例代码: 发送端代码: ``` #include <iostream> #include <WinSock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; int main() { // 初始化Winsock WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { cout << "WSAStartup failed: " << iResult << endl; return 1; } // 创建socket SOCKET sendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sendSocket == INVALID_SOCKET) { cout << "Failed to create socket: " << WSAGetLastError() << endl; WSACleanup(); return 1; } // 设置广播属性 BOOL bOptVal = TRUE; iResult = setsockopt(sendSocket, SOL_SOCKET, SO_BROADCAST, (char*)&bOptVal, sizeof(BOOL)); if (iResult == SOCKET_ERROR) { cout << "setsockopt failed: " << WSAGetLastError() << endl; closesocket(sendSocket); WSACleanup(); return 1; } // 设置目标地址 SOCKADDR_IN destAddr; destAddr.sin_family = AF_INET; destAddr.sin_port = htons(12345); destAddr.sin_addr.s_addr = INADDR_BROADCAST; // 发送数据 char sendBuf[] = "Hello, this is a broadcast message"; iResult = sendto(sendSocket, sendBuf, strlen(sendBuf), 0, (SOCKADDR*)&destAddr, sizeof(destAddr)); if (iResult == SOCKET_ERROR) { cout << "sendto failed: " << WSAGetLastError() << endl; closesocket(sendSocket); WSACleanup(); return 1; } // 关闭socket closesocket(sendSocket); WSACleanup(); return 0; } ``` 接收端代码: ``` #include <iostream> #include <WinSock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; int main() { // 初始化Winsock WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { cout << "WSAStartup failed: " << iResult << endl; return 1; } // 创建socket SOCKET recvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (recvSocket == INVALID_SOCKET) { cout << "Failed to create socket: " << WSAGetLastError() << endl; WSACleanup(); return 1; } // 设置广播属性 BOOL bOptVal = TRUE; iResult = setsockopt(recvSocket, SOL_SOCKET, SO_BROADCAST, (char*)&bOptVal, sizeof(BOOL)); if (iResult == SOCKET_ERROR) { cout << "setsockopt failed: " << WSAGetLastError() << endl; closesocket(recvSocket); WSACleanup(); return 1; } // 设置本地地址 SOCKADDR_IN localAddr; localAddr.sin_family = AF_INET; localAddr.sin_port = htons(12345); localAddr.sin_addr.s_addr = INADDR_ANY; // 绑定socket iResult = bind(recvSocket, (SOCKADDR*)&localAddr, sizeof(localAddr)); if (iResult == SOCKET_ERROR) { cout << "Failed to bind socket: " << WSAGetLastError() << endl; closesocket(recvSocket); WSACleanup(); return 1; } // 接收数据 char recvBuf[1024] = { 0 }; SOCKADDR_IN fromAddr; int fromLen = sizeof(fromAddr); iResult = recvfrom(recvSocket, recvBuf, sizeof(recvBuf), 0, (SOCKADDR*)&fromAddr, &fromLen); if (iResult == SOCKET_ERROR) { cout << "recvfrom failed: " << WSAGetLastError() << endl; closesocket(recvSocket); WSACleanup(); return 1; } // 显示收到的数据 cout << "Received message: " << recvBuf << endl; // 关闭socket closesocket(recvSocket); WSACleanup(); return 0; } ``` 这个示例代码实现了在本地网络中发送广播消息,并在另一台机器上接收。要注意的是,如果有多台机器在同一个局域网下运行这个示例代码,那么它们都会收到这个广播消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值