c++ - Socket exchange between winsock & QTcpServer -
i found socket code winsock2.h http://www.tidytutorials.com/2009/12/c-winsock-example-using-client-server.html code client.
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){ code server done 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); above server code failed attempt match server data client data. wrong? ty
i haven't used qt sockets can't contribute on server side code. however, i'm assuming since came samples ought correct.
your client code, otoh, not make connection server. tcp socket need
- create socket - you're doing this
- connect peer socket using connect() - this missing
- send data using send() - you're doing too
watch out how specify port numbers. if you're on windows, uses little endian while network byte order in big endian. sockets library provides htons() , ntohs() convert between two. make sure port number pass connect() (through sockaddr_in* argument) of same byte order used create qt server. relevant ip address well, less of issue 1 typically uses inet_addr("xx.xx.xx.xx") convert string ipv4 dword in correct byte order.
lastly, note may not receive send in 1 read() @ server. servers have buffering until end-of-message marker encountered (or preset length of message read).
hth
Comments
Post a Comment