一个关于Socket的问题

jerry_zhang99 2010-11-30 02:27:00
现在我要做一个socket通讯的 client端。在client端发送指令之后,server端,可能要分几次返回信息,而且会包括错误处理。

于是我想这样,发client端的发送和接收数据分开,client端发送数据之后,可以任意接收数据,同时也可以发送数据,有这样实现的案例吗。

...全文
151 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerry_zhang99 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jialine0426 的回复:]
管理通讯信道用TCP,数据通讯用UDP,记得包大小不要超过MTU设置的值,还要自定义UDP包的内容,方便重新组合数据
[/Quote]
包的大小为什么不要超过MTU设置的值,我记得,在tcp中socket会自动分发数据的啊
zslblue 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 jerry_zhang99 的回复:]
现在我要做一个socket通讯的 client端。在client端发送指令之后,server端,可能要分几次返回信息,而且会包括错误处理。

于是我想这样,发client端的发送和接收数据分开,client端发送数据之后,可以任意接收数据,同时也可以发送数据,有这样实现的案例吗。
[/Quote]

异步通信就是这样的。
发送和接收都是独立的线程,互不影响,当让,在需要的时候可以通过一些全局的变量来同步。我写的Socket程序就是这样的。
发送: 监测到需要发送就发送
接收:由数据接收就接受
烈火蜓蜻 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jerry_zhang99 的回复:]
引用 2 楼 jguon 的回复:

多开几个线程就可以了


多开几个线程,就是多了几个连接,把socket保留可以一直通信,但是,还是必须在接收完了之后才能再次发送啊,接收的数据可能要分3-4次,能不能完全分开呢,不用考虑Receive()就可以send
[/Quote]

那你就要判断了,如果数据接收 完成了,就发送数据,

这里要看你自己怎么定义这个接收算完成了。
jerry_zhang99 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangtaiping 的回复:]
引用 8 楼 jerry_zhang99 的回复:

引用 7 楼 jialine0426 的回复:
管理通讯信道用TCP,数据通讯用UDP,记得包大小不要超过MTU设置的值,还要自定义UDP包的内容,方便重新组合数据

包的大小为什么不要超过MTU设置的值,我记得,在tcp中socket会自动分发数据的啊

因为分包要耗费资源 要加包头等等
[/Quote]
您的意思是,自己来分包,省去了一部分协议栈的工作 是吗?这样也提高效率
wangtaiping 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jerry_zhang99 的回复:]

引用 7 楼 jialine0426 的回复:
管理通讯信道用TCP,数据通讯用UDP,记得包大小不要超过MTU设置的值,还要自定义UDP包的内容,方便重新组合数据

包的大小为什么不要超过MTU设置的值,我记得,在tcp中socket会自动分发数据的啊
[/Quote]
因为分包要耗费资源 要加包头等等
jialine0426 2010-11-30
  • 打赏
  • 举报
回复
管理通讯信道用TCP,数据通讯用UDP,记得包大小不要超过MTU设置的值,还要自定义UDP包的内容,方便重新组合数据
Harvey_He 2010-11-30
  • 打赏
  • 举报
回复
发送端口和接受端口不能分开么?
RoJJ_97 2010-11-30
  • 打赏
  • 举报
回复
客户端的发送,接收都采用异步。
jerry_zhang99 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jguon 的回复:]

多开几个线程就可以了
[/Quote]

多开几个线程,就是多了几个连接,把socket保留可以一直通信,但是,还是必须在接收完了之后才能再次发送啊,接收的数据可能要分3-4次,能不能完全分开呢,不用考虑Receive()就可以send
jguon 2010-11-30
  • 打赏
  • 举报
回复
你也可以把socket保留,不关闭就可以一直通信了
jguon 2010-11-30
  • 打赏
  • 举报
回复
多开几个线程就可以了
jerry_zhang99 2010-11-30
  • 打赏
  • 举报
回复
问题就出在,一个clientSocket 必须在接收数据完了之后才能,才能再发送,而这里有不想 对何时接收数据完成的判断

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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