在一个程序中的如何用socket实现一对多点同时通信?急!急!急!急!急!急!急!(200分)

  • 主题发起人 主题发起人 adongvic1
  • 开始时间 开始时间
A

adongvic1

Unregistered / Unconfirmed
GUEST, unregistred user!
如题!!
如果用多个server socket的话会不会有限制?
会不会有个数限制?为何我超过20个server socket同时进行侦听就出错?
有没有更好的解决方法?
 
一个server socket侦听一个port口, 每个port可以接受多个client连接, 你什么程序需要
开那么多port?
 
你的问题应当是SOCKET资源用光了。
如果是广播的话好象得用WINSOCK2。
 
问题在于socket用多了就不行了
出错了!!
怎莫办?
 
用 multi thread, 不要使用那么多PORT口!
 
看看你的程序, 是否有必要开那么多port口, 一般应用同时用到1-2个port口足够了.
或者分析一下您的功能. 没有什么关系的port放到不同的程序中实现(不同的process).
同一程序中使用multithread, 不过delphi建议thread不要太多, 多了效率反而低.
 
不过看您的题目好象不是这个意思?
一对多点通讯?
单个serversocket本来就支持多个client同时连接呀.
只要打开一个port, 用一个serversocket侦听. 随便多少client都能通过这个port与server
通讯的. 每当一个client connect之后, serversocket维护与这个client的连接. 同时
能处理的client数视机器的资源而定(100-200没有任何问题)
例如irc server:
最简单的只需要一个serversocket侦听port6667, 每当有client连入之后, serversocket
自动分配一个1024号以上的空port建立并维护与该client的通讯. 而这些都是系统提供的, 您
根本不必关心, 您所看到的只有一个serversocket, 连了无数个client.
 
只需要开一个Server Socket进行监听就行了,
每当客户端来的时候,都会接受而生成一个新的Socket和客户端通讯
在95/8系统下面如果同时使用了几十个Socket的话就很慢了,NT下面
好一些

如果确实需要支持大量用户的的话可以考虑用代理,或者用UDP之类
的,甚至需要修改系统核心的配置参数
 
只需要一个socket,建立一个自己的消息队列,利用windows的消息机制,
当侦听到一个客户时,发送自己的消息,在处理该消息时,尽量快速完成
客户的请求,必要时再启动线程(当然最好少用!).注意多个过程访问数据
库一定要注意技巧,BDE是有局限的哦.
 
有限制,资源限制!为什么要用多个口呢
 
不必用多个server socket,每个server socket可以有多个ClientSocket连接。
用ServerSocket.Socket.Connections[Index]处理每个ClientSocket连接(对应每个ClientSocket,Index(整型)的值不同。
ServerSocket.Socket.Connections[Index]是TCustomWinSocket Class的。

 
多人接受答案了。
 
后退
顶部