一个是通过winsock库提供的api实现,一个是boost库实现,两个方法都可以,因为项目是vc++6.0实现的,不支持boost库,只能使用winsock库,vc++6.0太老,局限性大。
通过Winsock库提供的API
通过UDP
#include<winsock2.h>
#include<vector>
#include<WS2tcpip.h>
#include<string>
#pragma comment(lib,"ws2_32.lib")
void CTestDlg::OnBnClickedButtonUdp()
{
// TODO: 在此添加控件通知处理程序代码
//方法4 使用udp
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
printf("初始化winsock失败.\n");
return;
}
SOCKET sock = ::socket(AF_INET, SOCK_DGRAM, 0);
if (sock == INVALID_SOCKET)
{
printf("无法创建套接字.\n");
WSACleanup();
return;
}
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080); // 设置目标端口号
//serverAddr.sin_addr.s_addr = inet_addr("192.168.1.100"); // 设置目标IP地址
inet_pton(AF_INET, "192.168.74.1", &(serverAddr.sin_addr)); // 设置目标IP地址
//要发送的数据
std::string sAllData = "IN;SC0,40,0,40;IP0,0,40,40;PL1,0;SP5;PU7996,0;PD0,1;\
PD0,4000;PD0,4020;PD4489,4021;PD4541,4021;PD7996,4020;PD8000,4001;PD7997,0;PU;7997,0;\
PL2,0;SP5;PU4054,4022;PD4454,4021;PF4514,4141,4574,4021;PD4774,4021;PUPD0,4040;PD0,8040;\
PD8000,8040;PD7996,4041;PD7996,4020;PU4514,4141;0,4020;PD0,4040;PU;0,4040;PU;";
std::vector<char> buffer(sAllData.begin(), sAllData.end());
const char* data = buffer.data();
int dataSize = strlen(data);
int bytesSent = sendto(sock, data, dataSize, 0, (struct sockaddr*)&serverAddr, sizeof</