我发现这个套接字代码有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 Class:
完成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);
以上服务器代码是我尝试将服务器数据与客户端数据匹配失败。怎么了? TY
答案 0 :(得分:1)
我没有使用Qt套接字,因此无法对服务器端代码做出太多贡献。但是,我假设它来自样本,它应该是正确的。
您的客户端代码OTOH未与服务器建立连接。对于TCP套接字,您需要
注意您如何指定端口号。如果你在Windows上,它使用小端,而网络字节顺序是大端。套接字库提供了htons()和ntohs()来在两者之间进行转换。确保传递给connect()的端口号(通过sockaddr_in *参数)与用于创建Qt服务器的字节顺序相同。这也与IP地址相关,但不是问题,因为通常使用inet_addr(“xx.xx.xx.xx”)以正确的字节顺序将字符串转换为IPv4 DWORD。
最后,请注意您可能无法在服务器上的一个read()中收到您发送的所有内容。服务器必须进行缓冲,直到遇到消息结束标记(或读取预设的消息长度)。
HTH
答案 1 :(得分:0)
这是有用的东西:(凌乱)
void FortuneThread::run()
{
QTcpSocket tcpSocket;
if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
emit error(tcpSocket.error());
cout<<"socket error"<<endl;
return;
}
//in part
tcpSocket.waitForReadyRead(10000);
int joj = tcpSocket.bytesAvailable();
char inbuffer[1024];
tcpSocket.read(inbuffer,1024);
string instring;
instring = inbuffer;
instring.resize(joj);
cout<<instring<<endl;
//out part
char buffer[1024];
int buffer_len = 1024;
int bytecount;
memset(buffer, '\0', buffer_len);
string outstring = "hey client!";
int TempNumOne=outstring.size();
for (int a=0;a<TempNumOne;a++)
{
buffer[a]=outstring[a];
}
QByteArray block;
block = buffer;
tcpSocket.write(block);
tcpSocket.disconnectFromHost();
tcpSocket.waitForDisconnected();
}