一个是通过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,

这篇博客介绍了在C++中使用Winsock库和Boost库进行TCP与UDP通信的方法。在Winsock库部分,提到了通过UDP和TCP的方式,并在实现过程中遇到的类型转换问题。而在Boost库部分,同样讨论了TCP通信。文章还详细解释了编译错误,如“不存在从‘std::vector<char, std::allocator>’到‘const char*’的适当转换函数”,以及如何使用`data()`或`&at(0)`来解决此类问题。最后,博主建议使用C++11或更高版本以获得更好的功能和支持。"
112048796,10539129,顺式作用元件:启动子与增强子解析,"['基因表达', '生物学', '遗传学', 'DNA结构', '转录调控']
最低0.47元/天 解锁文章
1516

被折叠的 条评论
为什么被折叠?



