udp程序设计问题难题,都来畅谈吧! ( 积分: 200 )

  • 主题发起人 主题发起人 wxjh2001
  • 开始时间 开始时间
W

wxjh2001

Unregistered / Unconfirmed
GUEST, unregistred user!
系统demo中我简单的设计是这样的:
放置了一个idudpclient1 传入窗体上的idudpclient1
form1---------------------->打开一个监听线程----------------------------〉
生成一个处理线程,传入了idudpclient1
当有用户消息来得时候--------------------------------------〉处理消息的时候还要
使用idudpclient1发送信息
同其他的用户进行通信-------------------------〉注1:这里我应该立即进行返回信息的处理
但是当用户发送信息的时候我外围的监听线程却得到了该信息,注1区域有时候会得到,有时候得不到,有什么方法让我的注1部分能够直接得到返回的信息,而避免在监听线程中得到,第二个问题是:假如我在注1处10000次send消息的时候,外围监听线程是不是挂起来没法读取其他用户返回给我的信息呢,程序中所有的udpclient1都是从界面中传入的那个,因为我要和外网通讯,所以只能用一个udp来处理所有的事情,大家畅谈一下解决方法
不知道我的表达能力大家是否能够看懂呢~!
 
系统demo中我简单的设计是这样的:
放置了一个idudpclient1 传入窗体上的idudpclient1
form1---------------------->打开一个监听线程----------------------------〉
生成一个处理线程,传入了idudpclient1
当有用户消息来得时候--------------------------------------〉处理消息的时候还要
使用idudpclient1发送信息
同其他的用户进行通信-------------------------〉注1:这里我应该立即进行返回信息的处理
但是当用户发送信息的时候我外围的监听线程却得到了该信息,注1区域有时候会得到,有时候得不到,有什么方法让我的注1部分能够直接得到返回的信息,而避免在监听线程中得到,第二个问题是:假如我在注1处10000次send消息的时候,外围监听线程是不是挂起来没法读取其他用户返回给我的信息呢,程序中所有的udpclient1都是从界面中传入的那个,因为我要和外网通讯,所以只能用一个udp来处理所有的事情,大家畅谈一下解决方法
不知道我的表达能力大家是否能够看懂呢~!
 
1. 你的问题很好, 其实你所说的实质是: 电脑(PC)不能同时做两件事情!
2. 基本上监听线程和数据发送共同使用一个udp(socket)是没有什么问题的;
3. udp传输数据本来就是不安全(可靠)的, 丢失数据的现象很正常;
4. 如果你有特殊的需求: 例如需要大量的发送数据同时要监听接收可能也是大量的数据;
对这中特殊的需求你得特殊处理(因为谁都不可能同时做好两件工作量大的事情);
建议的解决办法:
4.1 如果服务器也是你写的话,你完全可以同时使用两个udp(socket)的;
4.2.使用比较大的发送缓冲区暂时保存要发送的数据, 检测当监视接收线程空闲的时候发送;
5. 昨天我在这里刚发了一个源代码, 你可以看看, 记得帮我顶:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3287834
 
楼上兄弟,我说的就是这个意思的,呵呵,其实udp通讯数据传输我已经搞定了,基本上内网1.3m/s的传输速度,中间包括了对丢包现象的处理了,服务器我用java写的,客户端我用delphi,但是客户端和客户端通信的时候就会出现类似这些问题,所以才有此一问的
 
现在其实我不单纯是个c-->s的系统,而是个p2p系统,因为和外网通信,所以我只能在客户端上使用同样一个udp控件的,你说的使用两个udp控件的方法是没法行的通的
 
我现在其实自己在写一个类似bt的系统,只不过通信协议都是我自己定义的,平台我用java写的,delphi写客户端的,现在扫尾有小小的问题,其实我用sice和天网防火墙跟踪了好几个类似系统,发现其实都是使用了同样一个udp控件的,比如btcomit
 
to 天河流星
看了你写的东西,发现你好像对线程理解还是不够深,代码中出现了不少隐藏的问题,不过还是比较感谢你,我的问题应该比你代码中考虑的东西要复杂太多了,刚才我调试了一把,问题已经搞定了
 
后退
顶部