32通过tcp发送数组_客户端发送成功,服务器为什么收不到呢?

本文分析了TCP通信中常见的五个问题,包括发送字节数错误、数据格式不一致、结构体包含指针、一次发送对应多个接收以及接收数据存放位置错误,并提供了相应的解决方法。对于遇到类似问题的开发者,本文提供了宝贵的排查思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    ffccede888c0b9d225b9766353a6e199.png

代码敲了这么多年,头疼的不是写代码,而是调试代码。自从进了培训行业,我又发现,最头疼的还不是自己调试代码,而是帮别人调试代码。经常有学生直接把整个工程打包发过来:老师,某某某个功能有问题,帮我看下...最常见的问题有:
  • 第一次运行可以,怎么第二次就不行了?

  • 代码昨晚还是好好的,怎么今天就不行了?

  • 我已经保存数据了呀,怎么还是查不到?

  • 客户端发送数据了呀,服务器怎么收不到呢?

  • 我就照着你的代码写的啊,怎么运行结果不对呢?

140b6c7c008eb3770e134438991da7ec.png

这些问题,很让人奔溃!不去调试代码,怎么知道呢?下面就来总结总结,我调试过的关于“ 客户端发送成功,服务器却收不到”的问题原因。

1 发送的字节数错误

client.c

#include #include           /* See NOTES */#include #include #include #include #include #include #include int main(){
    
        int sockfd = socket(AF_INET, SOCK_STREAM, 0);    if (-1 == sockfd)    {           perror("socket");        exit(1);    }    struct sockaddr_in server_addr;    memset(&server_addr, 0, sizeof(server_addr));    server_addr.sin_family = AF_INET;    server_addr.sin_port = 8000;    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");    //向服务器发起连接    int ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));    if (-1 == ret)    {           perror("connect");        exit(1);    }    char *buf = "helloworld";    //每隔 1S 向服务器发送一个字符串    while (1)    {
    
            ret = send(sockfd, buf, sizeof(buf), 0);  //问题代码        if (-1 == ret)        {
    
                perror("send");            exit(1);        }        sleep(1);    }    close(sockfd);    return 0;}

注:注意 37 行,sizeof(buf)

server.c

#include #include           /* See NOTES */#include #include #include #include #include #include #include int main(){       //创建socket    int sockfd = socket(AF_INET, SOCK_STREAM, 0);   //ipv4协议  流式套接字   具体的协议类型    if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值