用winsock编程的伙伴注意了(编程建议)

dusj 2000-05-26 03:24:00
多次连续用sendata发送数据时,winsock会将数据拼装后再发送.结果可能将数据包
的前几位(可能是标识符)给放在数据中间了.接收端要将其拆开.
如:for i=1 to 100
winsock1.sendata "01"+str(i) '"01"是标记位
next
对方收到的可能(注意是可能)是: "01 101 201 3.....01 10....01 100"
好混乱啊.只好规定标记位是几位,数据位是几位等等.

for i=1 to 100
tmp1=str(i)
tmp1=space(3-len(tmp1))+tmp1
winsock1.sendata "01"+tmp1
next
OK, No problem.
再有就是:winsock有时不能正常传送汉字(有时可以,不明白?????)
...全文
200 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dusj 2000-06-05
  • 打赏
  • 举报
回复
No problem, I see.
winsockt送汉字绝对没问题,但接受方有时得用strconv(string, ...)进行转换,才能得到正常的汉字显示。对有些情况绝对没问题。
thank you. 谢谢大家支持,问题越辨越明。
sanhan 2000-06-05
  • 打赏
  • 举报
回复
使用TCP协议传送数据并不保证数据包间隔。
如果一定要保证包间隔,你需要自己设计握手及同步协议。

用UDP协议保证包间隔,但是有其它问题。
Wilbur 2000-06-03
  • 打赏
  • 举报
回复
要了解第一个问题, 你必须知道 Winsock(其实不止是 Winsock, BSD socket也是下面的实现方式)的缓冲机制. 无论在发送端还是在接收端, 数据都是首先放在一个缓冲池中(系统所有), 缓冲池满了, 才会给应用程序.如果你不想这样处理(例如telnet), 可以关闭 Negal 算法.
但是, 关闭 Negal 算法也并非一定有效. 因为数据经过每个网关等节点的时候, 他们自己会将数据缓冲后转发.
总之, 你必须注意, TCP/IP 协议处理的是数据流.

Winsock 不能传送中文? 不可能.中文和其他数据流有区别吗? 照你的说法, Winsock 还肯定不能传送二进制数据.
subzero 2000-06-03
  • 打赏
  • 举报
回复
不可能
我写的多人聊天经过测试一点问题没有

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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