0

客户端:

char buf[1024];  
int packetAmt = fileSize/PACKETSIZE;
cout<<"Number of packet amounts: "<<packetAmt<<endl; 

// send packet amount to serv
ibytessent=send(s,itoa(packetAmt,buf,10),sizeof(buf),0);   

服务器端:

char szbuffer[1024];
if((ibytesrecv = recv(s1,szbuffer,sizeof(szbuffer),0)) == SOCKET_ERROR)
     throw "Receive error in server program\n";
cout << "This is the number of packets sent: " << szbuffer << endl;
packetAmt=atoi(szbuffer);
cout << "This is the number of packets sent: " << packetAmt<< endl;

将 char 数组转换为整数后返回的整数与发送的字符串不匹配。但是打印字符串将返回正确的值。我也尝试过使用 strtol 函数。从整数转换为字符数组时会出现错误吗?

4

2 回答 2

1

atoi当它到达第一个非数字字符时将停止。如果接收缓冲区中没有终止符,它可能会超出数字的预期结尾。看来您也没有在发件人的缓冲区中放置终止符。

于 2013-09-30T21:39:43.460 回答
0

我意识到问题的根源,我有以下代码行将发件人的地址信息转换为十六进制值。以下所有代码都将整数值解释为十六进制而不是十进制。

cout<<"accepted connection from "<<inet_ntoa(ca.ca_in.sin_addr)<<":"
<<hex<<htons(ca.ca_in.sin_port)<<endl;

感谢您的意见,它确实有助于缩小问题范围!

于 2013-10-02T19:51:09.750 回答