c - 数据未正确发送/接收

标签 c sockets networking

我正在尝试使用 c 中的套接字实现 TCP 服务器/客户端。 我以这样的方式编写程序,即我们在客户端发送的任何内容都逐行显示在服务器中,直到键入退出。 该程序可以运行,但数据最后一起显示在服务器中。有人可以检查代码吗?

TCP 服务器

#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main()
{
    char buf[100];
    socklen_t len;
    int k,sock_desc,temp_sock_desc;
    struct sockaddr_in client,server;

    memset(&client,0,sizeof(client));
    memset(&server,0,sizeof(server));
    sock_desc = socket(AF_INET,SOCK_STREAM,0);
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    server.sin_port = 7777;

    k = bind(sock_desc,(struct sockaddr*)&server,sizeof(server));
    k = listen(sock_desc,20);
    len = sizeof(client);
    temp_sock_desc = accept(sock_desc,(struct sockaddr*)&client,&len);

    while(1)
        {
        k = recv(temp_sock_desc,buf,100,0);
        if(strcmp(buf,"exit")==0)
            break;

        if(k>0)
            printf("%s",buf);
    }

    close(sock_desc);
    close(temp_sock_desc);
    return 0;
}

TCP 客户端

#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main()
{
    char buf[100];
    struct sockaddr_in client;
    int sock_desc,k;

    sock_desc = socket(AF_INET,SOCK_STREAM,0);
    memset(&client,0,sizeof(client));
    client.sin_family = AF_INET;
    client.sin_addr.s_addr = inet_addr("127.0.0.1");
    client.sin_port = 7777;

    k = connect(sock_desc,(struct sockaddr*)&client,sizeof(client));

    while(1)
        {
        gets(buf);
        k = send(sock_desc,buf,100,0);

        if(strcmp(buf,"exit")==0)
            break;
    }

    close(sock_desc);
    return 0;
}

最佳答案

while(1){
    k = recv(temp_sock_desc,buf,100,0);
    if(memcmp(buf,"exit", 4)==0)
        break;
    if(k>0)
        printf("%*.*s", k, k, buf);
}

recv() 的结果不是字符串,因此不会以 nul 结尾。 上面的“修复”并不完全正确,只是为了给你指出正确的方向。

关于c - 数据未正确发送/接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633520/

相关文章:

Java ObjectInputStream(Socket套接字)重新启动整个应用程序?

c - 套接字服务器挂起

swift - 如何使用组合将异步加速度计更新发送到服务器

c - 使用具有复杂类型的 Lua FFI

c - 错误: function declared 'ms_abi' here was previously declared without calling convention (clang)

c++ - 使用 Ruby on Rails 进行复杂算法

java - 如何从服务器获取客户端套接字的确认?

核心数据实用程序教程 - 示例代码

c# - 如果我的服务器知道远程客户端的 IP 地址,我该如何向远程客户端发送消息?

c++ - QUdpSocket : No such file or directory