套接字客户端程序出错

时间:2014-06-25 11:57:34

标签: c sockets client

我已经创建了一个客户端服务器程序并且已经成功运行了。代码写在下面。但while (1)循环对我来说并不清楚,我不知道为什么我使用fgets这里,为什么标志设置为零?详细解释将有所帮助。

套接字客户端代码:

    while (1)

    {

        fgets(input, BUFFER, stdin);
        send (sock, input, strlen(input),0);

        len = recv(sock, output, BUFFER, 0);
        output [len]='\0';
        printf("%s\n", output);
    }

    close(sock);
}

3 个答案:

答案 0 :(得分:2)

我认为你的代码中有拼写错误

使用strlen代替strln

修改

while(1)

fgets(input, BUFFER, stdin);

此行获取用户输入并将其存储在input缓冲区中,最大长度为BUFFER

send (sock, input, strlen(input),0);

此行将数据包(此处为input)发送到带有描述符sock的连接套接字

len = recv(sock, output, BUFFER, 0);

此行从连接的套接字接收带有描述符sock的消息,并且在成功接收数据后,接收数据的长度返回到len。收到的数据将存储在output缓冲区中,output缓冲区大小为BUFFER

output [len]='\0';

使用NULL Terminator结束收到的数据。

因此,它基本上从用户获取数据,将其发送到连接的套接字并从该连接的套接字接收响应。

此外,您认为why the flag is set to 0表示此标志指定影响 recv / send 功能的行为。但如果您不想使用任何旗帜,只需将其设为 0

您可以查看其他标记值如何用于recvsend功能。

答案 1 :(得分:1)

我认为你想使用strlen(input)。你错过了一个电子邮件。

答案 2 :(得分:1)

错误是strln()在您的程序中不可用。使用strlen()代替strln()

while(1)的解释:

这里while(1)从用户获取输入并发送到另一个套接字。 recv等待另一个套接字发送的消息。这只是发送和接收消息。

使用某些测试条件来破坏语句,例如if(strcmp(input,"END") == 0) break;否则它会一次又一次地继续工作。