socket编程问题

DuelOMH 2013-03-13 06:26:23
我用vs2010创建一个聊天的控制台程序(目的就是想练习一下socket编程)

服务器端我用事件选择模式来监听客户,客户端用的是选择模式。这个程序的功能就是:客户发送一条消息到服务器,服务器将这条消息显示出来,然后向客户端发送一条消息,但是现在

的问题就出来了。

当我在客户端输入一条要发送的信息,如“I am client1”,服务器端显示的时候应该作为一条消息显示,但是服务器将条消息作为三条消息显示了,如::“I”作为一条,“am”作为一

条,“client1”又作为一条,这样就有三条消息了。这和我预期显示的结果又差异,为什么是这样子的,我该怎么解决呢?

我的源代码可以在以下网址下载:
http://download.csdn.net/my
...全文
154 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
翅膀又硬了 2013-03-14
  • 打赏
  • 举报
回复
引用 8 楼 nice_cxf 的回复:
基本就是粘包问题,也就是老赵所说的那句什么来着。。。。
10多个字节,每次都粘包,感觉不会这样。而且都以空格来分隔开,就更蹊跷了
sumos 2013-03-14
  • 打赏
  • 举报
回复
我觉得不该是send一次多次recv,因为我以前试过,就算发送1024个字节也是可以一次接收的。 lz还是把send和recv代码贴出来
mujiok2003 2013-03-14
  • 打赏
  • 举报
回复
Tcp是字节流,需要自己分割消息。换udp试试
nice_cxf 2013-03-14
  • 打赏
  • 举报
回复
基本就是粘包问题,也就是老赵所说的那句什么来着。。。。
翅膀又硬了 2013-03-14
  • 打赏
  • 举报
回复
你应该学着自己调试。先看客户端send情况,3个单词是不是一次发送的 再看接收端怎么收的,一次收到多少,再看怎么显示的
YunXia98Li 2013-03-14
  • 打赏
  • 举报
回复
这有socket例子,你可以用别人写好的程序测试一下: http://download.csdn.net/detail/geoff08zhang/4571358
乔巴好萌 2013-03-13
  • 打赏
  • 举报
回复
很简单,楼主因为没做数据上的分界,导致在接收端无法确定你什么时候数据才算发完。可以使用xml来封装这样的数据。 比如 <msg>I am a good boy</msg> 当接收端采用基于SAX的方式接收数据时,收到</msg>后自动触发事件通知上层表示消息接收完毕
zmshy2128 2013-03-13
  • 打赏
  • 举报
回复
楼主用tcp来传送数据,就要做粘包处理,百度搜一下吧 一次send可以要多吃recv才能接收完。
zilaishuichina 2013-03-13
  • 打赏
  • 举报
回复
没下代码 目测楼主是 recv一次就print了一下 应该是 recv完再print 客户端send一次,服务端不一定是一次recv完的,有可能需要多次recv才能完整接受客户端的一次send
苹果皮 2013-03-13
  • 打赏
  • 举报
回复
发一下你服务端接收数据 处理的那块代码吧
starytx 2013-03-13
  • 打赏
  • 举报
回复
那得看你的发送和接收数据存储在什么东西里了,看情况是被空格自动截断了

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧