收录日期:2020/05/31 09:00:23 时间:2016/06/04 10:41:21 标签:网络编程
我有一个C的TCP包接收程序如下:
static void tcpecho_thread(void *arg)
{
    int sockfd, new_fd;
    struct sockaddr_in my_addr;
    struct sockaddr_in their_addr;
    int sin_size;
    int numbytes;
    int port_numb = 8686;
    char buf[256];
    
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        printf("\n TCP socket open error!");
        close(sockfd);
    return;
    }
    else
        printf("\n TCP socket open ok!");   
   
    //initialize & bind
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(port_numb);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    BZERO(&(my_addr.sin_zero),8);
    
    //bind socket
    if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1)
    {
        printf("\n TCP socket bind error!");
        close(sockfd);
    return;
    }
    else
        printf("\n TCP socket bind ok!");   
    
    
    //create listen socket.
    if(listen(sockfd, 10) == -1)
    {
        printf("\n TCP socket listen error!");
        close(sockfd);
    return;
    }
    else
        printf("\n TCP socket listen ok!");   

    //wait fot connection
    while(1)
    {
        sin_size = sizeof(struct sockaddr_in);
        
        if((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1)
        {
            printf("\n New socket can not be created!");
            return;
        }
        else
            printf("\n New socket is created!");
            
        //Read info
        if((numbytes = recv(new_fd, buf, 256, 0)) == -1)
        {
            printf("\n Read data error!");
            return;
        }
        else
        {
            printf((char *)buf);
            printf("\n Read data!");
        }
        
        //Send info back
        if(send(new_fd, "ok!", strlen("ok!"), 0) == -1)
        {
            printf("\n Send Error!");
            return;
        }
        else
            printf("\n Send ok!");
            
        //close(new_fd);
    }
    //close(new_fd);
    close(sockfd);
}

另外一端用程序发送TCP打包的字串,程序运行后发现每次在打印“Read data!”的地方只出现了8次就再也不出现了,socket连接是没有问题的,大家有没有好的建议,多谢!

TCP包接收后一定要会复消息,我这样写不知道可以吗?
accept放到外面,你这个在循环里面需要在客户端每次发信息时也要重新连接一次。
楼上大侠能不能说清楚点啊,多谢了
大家多指点啊
没人?
属于阻塞式的,accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1),会一直阻在那里,等待下一个连接消息的请求,可以设计多线程。若只是一个计算机连接,则把accept()提出循环外边,但是现在循环还没有出口呢?
up
自己顶
估计你发包的程序有问题

求 中文字体库 .ttc 格式 能显示中文 小于10M 越小越好 LocalFree 时 堆被破坏 如何獲取積分? 我要下載東西沒積分! 求SQL写法,每次查询同等的多条数据 delegate 未将对象引用设置到对象的实例 简单的正则,请各位赐教一下,在线等!!!!! 如何使用FindWindowEx获取窗体内控件句柄? window.external为空或不是对象 关于移动agent的问题 集成paypal IPN 返回值 一直是 INVALID document.write(\"start\");//这句不写js不执行,为什么? js提交表单问题 vc中怎么才能锁定计算机 RAID 5 帮忙看下这段SQL哪出问题了 请问下windows mobile手机使用directshow调用摄像头问题 做开发的女生如何转型? C#如何得到另一C++程序的指针地址 请问ANDROID开发哪本书比较适合入门者? 这个问题很奇怪,帮忙看看 为什么我用extjs写出来的日起选择器显示不完整 表单上传问题 请教大家:正则表达式查找问题 java对象放在堆中,在线等 简单随机数算法请教 MFC ADO import error LNK2001: 无法解析的外部符号 public: virtual void __thiscall CDialog 尝试读取或写入受保护哦内存。这通常指示其他内存已损坏。。 抽象想类与接口的区别 js里面的html注释 加载错误...C/....*.log