从套接字中的char缓冲区转换为整数

时间:2013-09-30 21:36:55

标签: c++ sockets

客户端:

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函数。从整数转换为char数组时会发生错误吗?

2 个答案:

答案 0 :(得分:1)

atoi到达第一个非数字字符时,它将停止。如果接收器缓冲区中没有终结器,它可能会超过该号码的预期结束。看来你也没有把终结者放在发送者的缓冲区中。

答案 1 :(得分:0)

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

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

感谢您的投入,这确实有助于缩小问题范围!