- 论坛徽章:
- 0
|
原帖由 alexhappy 于 2009-2-20 21:15 发表
???send不是只把数据拷到发送缓冲区里了没?第一个send有可能跟第二个send一起发送了不是吗?
应该是的,send只是copy数据到tcp的发送缓冲区,如果网络忙,消息很短,很可能第一个send和第二个send是被TCP协议一起送出去。
另外:TCP协议是基于流的,根本不关心流的内容,至少有三个方案来解决lz问题
1. 断流:
发送一个消息后,close socket,只有close socket 时 tcp 才会清缓冲区。
2. 自己定义一下消息的结束符号。server端直接根据结束符号处理消息,支持一次处理多条消息。
如果消息是文本好说,定义一下回车就可以,或者自己再随便选一个;
如果是二进制则client encoding一下, server decoding 一下,编码方式也有很多可以google一下
3. 使用socket.fineno(),返回fd ,然后再调用flush 看看, 不过python 的 library ref上说windows不支持,此法我没试过!!
猜想flush使用的是操作系统IO的同步功能,应该与TCP内部实现无关。 |
|