socket问题(50分)

H

hrm

Unregistered / Unconfirmed
GUEST, unregistred user!
当client端连接server端时,如何得知connections的号
 
???没懂!!!!!
说清楚点吧!
 
你是说这个client对应的在server端中connections数组的那个socket
endpoint的下标?这个不可能直接得到,不过你的server可以在通信开
始的时候把这个下标传给client端阿
 
请赐教,在通讯开始时如何得到那个下标。
还有,我用SOCKET进行通讯时,如何将服务器端的信息发给指定的客户端。
 
server不是有个OnClientConnet事件之类的东西吗(不好意思,很久没用
TServerSocket/TClientSocket了),你难道不能在这个事件里面获得新的
Connections数组的Index吗,如果没有办法你干脆在connect成功以后遍历
整个connections数组找到和远端的机器的IP/PORT对应的那个connections
数组的元素应该也可以把
 
呵呵,都是我惹的祸,当初这问题,我也想了很长。。。。
Delphi里附带的是很次的,找一些高级的去用吧,很省心的。
 
可以在DELPHI自带的例子中得到一些有用的消息/DEMO/INTERNET/CHAT
当CLIENT连接到SERVER时,SERVER会触发CLIENTCONNECTED事件,此时在该过程的参数中有
SOCKET,该SOCKET的值,就是刚刚建立连接的CLIENT的SOCKET的值
发送回CLIENT可以这样:SERVERSOCKET.SOCKET.CONNECTTION[这里可以添发送到那个CLIENT].SENDTEXT();
 
用WINSOCK写吧不是很难了呵呵
 
同病相怜
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=412531
 
to:凌云景
在CLIENTCONNECTED中确实可以得到一个socket
可是我需要任意时刻与我相连机器的socket所有connections值。


to:seawalker
如你所说,问题可以解决,可是当我发送一条消息的时候,不是让我将消息发给每一个客户,
然后在客户端过滤。那不是很慢.

to:老郭
如果你还有点人性的话,把你遗留的问题解决再说。
 
我最近正在写基于tcp/ip 协议的聊天工具,你所提到的问题目前我的解决方法是定义一个记录类型
里面包含客户端的用户名,socket,和地址,socket的取得由服务器端onclientconnect事件中的socket
参数得到,每次客户端发来请求时,查找记录中的客户值
 
hrm:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
 
哎,真麻烦.
如果要做一个聊天的东东,还可以用哪个控件?

 
作聊天室,除了用SOCKET,还可以用什摸。
 
用NMUDP控件,象OICQ一样,用UDP协议!!!
我最近刚完成我的<a href="http://www.qzone.com/home/w/wi/wind2000/delphi/program/NetICQ.zip">《局域网寻呼机NetICQ》3.0</a>,欢迎使用并提出建议!
欢迎光临<a href="http://ph11.126.com">风之纹章</a>
 
我有一个办法:
ServerSocket1.Socket.Connections[n]中的n是系统自动维护的,
也就是说,当客户端连接时自动在Connections中增加一个,当断开时自动减少一个,
那么问题的关键就是具体是哪一个n?因此我利用一个TStringList与Connections同步:
(1)当客户端连接时,在OnConnect事件中向TStringList中添加一个客户端的IP地址,
那么添加的TStringList的Index刚好与Connections中的n相对应;
(2)当客户端断开时,在OnDisConnect事件中从TStringList中删除一个客户端的IP地址,
也就去掉了Connections中的对应的n
(3)这样只要知道客户端的IP地址(可用Socket.RemoteAddress获知),就可以用
ID:=ClientList.IndexOf(Socket.RemoteAddress)获知该Connections的n
(4)用ServerSocket1.Socket.Connections[ID]调用所需的Socket的所有方法、属性了!

这个方法已经通过实验(五个客户端),的确可行!

大家认为这样有何不妥?请指正!谢谢!
 
顶部