gpt4 book ai didi

c++ - winsock 和 QTcpServer 之间的套接字交换

转载 作者:行者123 更新时间:2023-11-28 08:03:05 29 4
gpt4 key购买 nike

我用 winsock2.h 找到了这个套接字代码 http://www.tidytutorials.com/2009/12/c-winsock-example-using-client-server.html这是我客户的代码。

int hsock;
int * p_int ;
hsock = socket(AF_INET, SOCK_STREAM, 0);
///

char buffer[1024];
int buffer_len = 1024;
int bytecount;

int c;
memset(buffer, '\0', buffer_len);

for(char* p=buffer ; (c=getch())!=13 ; p++){
printf("%c", c);
*p = c;
}

if( (bytecount=send(hsock, buffer, strlen(buffer),0))==SOCKET_ERROR){

服务器代码使用 Qt QTcpServer 类完成:

void FortuneThread::run()
{
QTcpSocket tcpSocket;
if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
emit error(tcpSocket.error());
cout<<"socket error"<<endl;
return;
}

char buffer[1024];
int buffer_len = 1024;
memset(buffer, 0, buffer_len);
strcat(buffer, " SERVER ECHO");

QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << &socketDescriptor;
out << buffer;
out << strlen(buffer);
out << 0;

tcpSocket.write(block);

上面的服务器代码是我尝试将服务器数据与客户端数据匹配的失败尝试。怎么了?型

最佳答案

我没有使用过 Qt 套接字,所以不能在服务器端代码上贡献太多。但是,我假设由于它来自样本,所以它应该是正确的。

您的客户端代码 OTOH 没有与服务器建立连接。对于 TCP 套接字,您需要

  1. 创建套接字 - 你正在做这个
  2. 使用 connect() 连接到对等套接字 - 缺少这个
  3. 使用 send() 发送数据 - 你也在这样做

注意指定端口号的方式。如果你在 Windows 上,它使用小端,而网络字节顺序是大端。套接字库提供 htons() 和 ntohs() 来在两者之间进行转换。确保您传递给 connect() 的端口号(通过 sockaddr_in* 参数)与用于创建 Qt 服务器的字节顺序相同。这也与 IP 地址相关,但问题不大,因为通常使用 inet_addr("xx.xx.xx.xx") 以正确的字节顺序将字符串转换为 IPv4 DWORD。

最后,请注意,您可能无法在服务器的一次 read() 中收到您发送的所有内容。服务器必须进行缓冲,直到遇到消息结束标记(或读取预设长度的消息)。

HTH

关于c++ - winsock 和 QTcpServer 之间的套接字交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10886679/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com