关于socket的连接的问题,很简单!(50分)

  • 主题发起人 主题发起人 紫金山
  • 开始时间 开始时间

紫金山

Unregistered / Unconfirmed
GUEST, unregistred user!
对于服务器有一个连接成功,SOCKET的activeconnections的组值就会增加1
,从0开始直到目前的建立的连接数,我的问题是:如果当前的比如connections[0]断开了
连接,我要和最初的connections[1]传输数据,那么是应该...connections[1].SendText(...)
还是...connections[1].SendText(...)?还有就是服务器的连接数目有没有截至?以上说的是serverType
的属性是stnotblocking非阻塞氏的。

 
为什么没人回答呢?
 
activeconnections是serversocket当前连接数,当一个socket连接成功就加1,断开就减1。
象你描述的情况,应该是用connections[0].SendText(...),如果用connections[1].SendText(...)
,应该会报错的。我建议你不要用这种方式,你最好是登记每个连接的描述字,需要返回结果
时,就在描述字中返回。
连接数的数目由系统来决定,不同的系统就不同。
 
楼上,多谢,你说的“你最好是登记每个连接的描述字,需要返回结果
时,就在描述字中返回。”方法,我不会,怎么做呢?或者给个例子,望指教!恭听!先谢了!
 
定义一个全局数组:SockFd:Array[0..255] of Integer;
在onaccept事件里处理:
for i := 0 to 255 do
if SockFd <= 0 then
begin
SockFd := ClientSocket.SocketHandle;
break;
end;

在onClientDisconnect事件处理:
for i := 0 to 255 do
if SockFd == ClientSocket.SocketHandle then
begin
SockFd := -1;
break;
end;

在onclientread里也可以获取到SocketHandle,这样对需要的socket就可以对应地发送消息了
for (i := 0 to 255 do)
if SockFd = SocketHandle then
begin
ServerSocket1.Socket.Connections.SendText('is you');
break;
end
 
chenxz:十分感谢,还有一点问题那个ClientSocket.SocketHandle是当前读写的Socket的属性么?
还有就是,那最后一段语句:
if SockFd = SocketHandle then
begin
ServerSocket1.Socket.Connections.SendText('is you');
break;
end
SockFd 和Connections是完全对应的么?
比如,有一个断开连接后(比如说i=2,而且SockFd[3] ,SockFd[4]都不为-1 )又一个建立连接。他就会补充进这个SockFd 对应的数组单元
中(按照)你的程序,那i=3,i=4的连接在Connections的数组中是排在这个新连接的socket
之后了?
在这个socket的连接问题上,小弟很不懂,望不厌我烦:)
 
在onRead事件里相应请求,哪个SOCKET发过来的数据,就返回相对应的数据,基本上可以避免这个问题
但是如果需要更多的功能,还是用API写好
 
比如,我要实现的功能是第一个通讯完毕,通知第二个:可以进行通话了。然后可以进行数据
的交换了。等等。。。。
 
哦,可能不是对应的,要处理一下。让她成为对应关系。
 
那么怎么处理阿?
 
chenxz:那个ClientSocket.SocketHandle 属性到底是什么,能不能仔细解释一下
我好像没有找到他啊,只找到了SocketHandle 属性
 
ClientSocket是serversocket的一个client连接来的。
你如果只是处理简单的功能,就在onRead事件里相应请求,哪个SOCKET发过来的数据,
就返回相对应的数据,否则还是用api写比较好,或者用thread。
 
有没有用api写的例子?谢谢
 
后退
顶部