正在编写通过套接字发送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);

这个坏了。您应该声明integers的数组。原因是buf[i] = x意味着把一个字节放在第i个单元格上,如果它不适合,那么就截断它。这就是正在发生的事情。

关于c - 向/从套接字发送带符号的整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7476902/

10-11 19:43