现在我用qt的自带的网络通信类写了c/s程序,运行正常,用标准socket写了c/s也正常。现在把qt的server和标准socket的client进行通信,连接请求可以收到,数据收不到(反之宜然), 都是用char * 作为通信参数的。下面是部分代码:
qt的c/s 代码:
【server:】
char *strHeadInfochar,*strDatachar;
QString strHeadInfo,strData;
QString DataLen;
int uiDataLen;
QDataStream in(clientPowerConnection);
in.setVersion(QDataStream::Qt_4_2);
in >>strHeadInfochar;
strHeadInfo.clear();
strHeadInfo.append(strHeadInfochar);
cout<<"test...."<<endl; ////////////////// just for test
cout<<"strHeadInfochar="<<strHeadInfochar<<endl;////////////just for test
if(Parse(strHeadInfo,strFileName,DataLen))
{
uiDataLen=DataLen.toInt();
strDatachar=new char[uiDataLen];
in >> strDatachar;
strData.clear();
strData.append(strDatachar);
}
else cout<<"not found #"<<endl;
【client:】
tcpSocket->abort();
tcpSocket->connectToHost(QString("192.168.1.3"),12338);
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_2);
/* char *str,*strdata; str=new char[50]; strdata=new char[250];*/ //right
char str[50], strdata[250];
strcpy(str,"Power#30");
sprintf(strdata,"%d,%5.1f,%5.1f,%5.1f,%5.1f",122222,88.1,99.1,1000.1,1000.1);
out << str;
out<<strdata;
tcpSocket->write(block);
标准socket的c/s 代码:
【server:】
while(1)
{ sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sock_fd,(struct sockaddr *)&their_addr,&sin_size))==-1)
{perror("accept"); continue;}
if(!fork())
{ if(recv(new_fd,str,50,0)==-1) perror("recv1");
fprintf(stderr,"str=%s\n",str);
if(Parse(str,&datalen))
{ uidatalen=atoi(datalen);
strdata=(char*)malloc(uidatalen*sizeof(char));
}
else {perror("datalen");exit(0);}
if(recv(new_fd,strdata,uidatalen,0)==-1) perror("recv2");
fprintf(stderr,"strdata=%s\n",strdata);
free(strdata);
close(new_fd); exit(0);
}
close (new_fd);
waitpid(-1,NULL,WNOHANG);
}
}
【client:】
if( 0 > connect(white_sock,(struct sockaddr *)&me,sizeof(struct sockaddr)))
printf("connect failed\n");
char str[50];
char strdata[200];
sprintf(strdata,"%d,%5.1f,%5.1f,%5.1f,%5.1f",122224,88.1,99.1,1000.1,1000.1);
sprintf(str,"Power#%d\0",strlen(strdata));
send(white_sock,str,50, 0);
send(white_sock,strdata,strlen(strdata), 0);
问题是当标准socket的client给qt的server发送数据的时候,console在打印完test...之后,就没有输出,StatusContext被更新成"parse return 0",此句cout<<"not found #"<<endl没有输出,直到将程序退出才输出strHeadInfochar=[root@dxwang server]#
即最终结果为:
first length=82;
hello
strHeadInfochar=[root@dxwang server]#
请给你提示,谢谢!
[ 此贴被XChinux在2007-08-17 20:02重新编辑 ]