游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2602|回复: 4

请问一个关于socket的tcp\ip编程

[复制链接]

10

主题

26

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2009-3-29 02:27:00 | 显示全部楼层 |阅读模式
服务器端
void mian()
{
    SOCKET s = socket(....);
    SOCKADDR_IN addr;
    addr = ......;
   
    bind(....);
    listen(....);

    SOCKET cs = accept(....);

    char buf[1024];
   
    while(recv(....))
    {
        printf("%s\n",buf);
    }
}


客户端
void main()
{
    SOCKET s = socket(....);
    SOCKADDR_IN addr;
    addr = ......;

    connect(....)
    char *buf = "aa_"

    for(int i=0;i<100;i++)
        send(buf....);
}


客户端用send连续发了100个包,
为什么客户端recv只接收了1次,
并且while循环里面也执行了一次,
printf出来的内容是这100个包的一个字符串,只执行了1次
服务端recv了一次,把客户端的100次send全接收了。
这是怎么回事啊


如果客户端口里面的send好了,sleep(1)的话,
服务器端有是接收了100次包,while执行了100次

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2009-3-29 15:41:00 | 显示全部楼层

Re:请问一个关于socket的tcp\ip编程

TCP是一个Stream协议,会粘包的.你自己拆包吧

7

主题

392

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2009-3-31 19:13:00 | 显示全部楼层

Re:请问一个关于socket的tcp\ip编程

C不太清楚,不过是不是你发送的时候没有调用发送的方法,最后SOCKET.close()的时候才发送导致的问题?
TCP粘包这个说法我觉得不太靠谱。

3

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2009-4-1 20:54:00 | 显示全部楼层

Re:请问一个关于socket的tcp\ip编程

同意2楼的,TCP是一个流协议,确保字节按流发送到目的地
TCP的收发过程中没有明确的“包”这个概念
要自己写代码来实现包的概念。
比如一个字节表明一个包100字节,
客户端就知道,收到50字节是半个包,
如果收到150字节肯定是一个以上的包

10

主题

26

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2009-4-3 22:47:00 | 显示全部楼层

Re:请问一个关于socket的tcp\ip编程

恩,我自己已经找到问题了,
是TCP粘包导致的
谢谢大家
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 15:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表