1.简单的建立 UDP 传输

来源:互联网 发布:财务d6软件好不好 编辑:程序博客网 时间:2024/06/05 01:10

接收端:

接收信息并打印来源IP和端口

#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <WinSock2.h>//接收端#include <iostream>using namespace std;#pragma comment(lib,"ws2_32.lib")enum {PORT = 8888};//设置端口为8888int main() {WSADATA wd;WSAStartup(0x0202,&wd);//目前最高是2.2版本SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);//两种:UDP,TCPif (INVALID_SOCKET == sock) {cout << "创建socket套接字(句柄)时出错: " << WSAGetLastError() <<  endl;return -1;}sockaddr_in sa = { 2 };//地址信息结构体:IP和窗口。//sockaddr sa = {2}; //旧版的,sockaddr_in是新版的sa.sin_port = htons(PORT);sa.sin_addr.S_un.S_addr = 0;//inet_add("192.168.1.1");int n = bind(sock,(sockaddr *)&sa,sizeof(sa));char s[2048];//缓冲区,2048个可任意设置,别太小n = recv(sock, s, sizeof(s), 0);if (SOCKET_ERROR == n) {cout << "接收数据时出错:" << WSAGetLastError() << endl;return -1;}sockaddr_in from;//目的为了获取其地址 具体可查recvfrom函数int nLen = sizeof(from);while (true)//一直接收{char s[2048] = {0};n = recvfrom(sock,s,sizeof(s),0,(sockaddr *)&from,&nLen);s[n] = 0;cout << "IP:" << inet_ntoa(from.sin_addr) << "  PORT: " << htons(from.sin_port) << endl;//信息反转输出信息来源IP地址和端口cout << s << endl;}}

发送端:

#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>//发送端#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")enum { PORT = 8887 };//设置端口int main(){using namespace std;WSADATA wd;WSAStartup(0x0202, &wd);//目前最高是2.2版本SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);//两种:UDP,TCPif (INVALID_SOCKET == sock){cout << "创建socket套接字(句柄)时出错: " << WSAGetLastError() << endl;return -1;}sockaddr_in sa = { 2 };//地址信息结构体:IP和窗口。sa.sin_port = htons(0);//0代表系统自动找一个可用端口sa.sin_addr.S_un.S_addr = 0;//inet_addr("192.168.1.1");bind(sock,(sockaddr*)&sa,sizeof(sa));//绑定sockaddr_in to = {2};sa.sin_port = htons(8888);//对方的端口char sIP[20], s[2048];//定义IP和发送数据的长度。while(true){cout << "请输入接收端的IP地址:";cin >> sIP;cin.get();//读取输入sIP后的一个换行符cout << "请输入要发送的内容:";//fflush(stdin);gets_s(s,sizeof(s));//cin.getline(s,2047);sa.sin_addr.S_un.S_addr = inet_addr(sIP); //inet_addr("192.168.1.1");//对方的IP地址sendto(sock, s, strlen(s), 0, (sockaddr*)&sa, sizeof(sa));//注意这里的(sockaddr*)&sa 强制转换}return 0;}