1.简单的建立 UDP 传输
程序员文章站
2022-07-04 18:49:20
...
接收端:
接收信息并打印来源IP和端口
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>//接收端
#include <iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
enum {PORT = 8888};//设置端口为8888
int main()
{
WSADATA wd;
WSAStartup(0x0202,&wd);//目前最高是2.2版本
SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);//两种:UDP,TCP
if (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,TCP
if (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;
}
上一篇: 样式绑定之内联样式Style: