正在编写通过套接字发送4个int的应用程序,尝试以下操作,但在接收端得到0。。。
我想这和我传递给他们的方式有关。。。
int _send(int sock, int c, int x, int y, int w)
{
int cc, xc, yc, wc;
char buf[16];
int offset;
struct sockaddr_in sap;
char echoBuffer[1]; /* Buffer for echo string */
int bytesRcvd, totalBytesRcvd; /* Bytes read in single recv() and total bytes read */
offset = 0;
buf[offset] = htonl(c);
buf[4] = htonl(x);
buf[8] = htonl(y);
buf[12] = htonl(w);
if (send(sock, buf, 16, 0) != 16)
{
printf("send() sent a different number of bytes than expected");
return(-1);
}
//...
}
这是接收端的代码:
while (listen(sock, 2) == 0)
{
printf("listened...\r\n");
int addrlen;
struct sockaddr_in address;
addrlen = sizeof(struct sockaddr_in);
int channel = accept(sock, (struct sockaddr *)&address, &addrlen);
if (channel<0)
{
perror("Accept connection");
return -1;
}
else {
printf("accepted\r\n");
while (1)
{
int size = 16;
char buffer[16];
recv( channel, buffer, size, 0);
for (int i=0; i<=12; i+=4)
{
int c = ntohl(buffer[i]);
printf("%d\r\n", c);
}
}
最佳答案
buf[offset] = htonl(c);
buf[4] = htonl(x);
buf[8] = htonl(y);
buf[12] = htonl(w);
这个坏了。您应该声明
int
egers的数组。原因是buf[i] = x
意味着把一个字节放在第i个单元格上,如果它不适合,那么就截断它。这就是正在发生的事情。关于c - 向/从套接字发送带符号的整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7476902/