又是Socket通信的小问题,在线等待,立马送分(30分)

  • 主题发起人 主题发起人 nywjx
  • 开始时间 开始时间
N

nywjx

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi的socket控件写程序,一个服务器程序,一个客户端程序;
两者均使用非阻塞方式,客户端需要从服务器程序下载数据,耗时2、3分钟;
请问在服务器端怎么判断是哪个客户端请求发送数据?是否可以两个客户端
同时请求服务器端发送数据?怎么实现?
 
服务器端可以在接收客户端请求时就可以获得客户端的地址,而且服务器和客户端完成握手
后,每对连接都会以一个单独的管道符来标识,所以服务器端是很容易区分出来是哪一个客
户端连接的。
 
>服务器端可以在接收客户端请求时就可以获得客户端的地址,而且服务器和客户端完成握手
~~~~~~是指IP地址吗?
>后,每对连接都会以一个单独的管道符来标识,所以服务器端是很容易区分出来是哪一个客
~~~~~~什么来的?
>户端连接的。

请再说得详细点,写点代码好吗?
 
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage('接到来自'+Socket.RemoteAddress+'发送的数据);
//连接管道符(或连接描述符)是UNIX下的说法,在Windows下不妨叫做句柄
ShowMessage('socket连接管道符为:'+IntToStr(Socket.SocketHandle));
end;
 
是否可以两个客户端同时请求服务器端发送数据?怎么实现?
当然可以,采用线程处理,服务器端最好采用(阻塞)多线程,这样
每个客户只能在线程内部处理!
 
>当然可以,采用线程处理,服务器端最好采用(阻塞)多线程,这样
>每个客户只能在线程内部处理!
服务器端的代码是一样的,放在线程里吗?
客户端也要用线程吗?
 
另外,一个客户端先和服务器端连接,成功后服务器向客户端发送数据;
这时,另一个客户端又和服务器端连接,也请求服务器端发送数据。
那么,在服务器端程序中怎么区分是发送给哪个客户端的呢?因为两个
客户端接收数据有先后之分啊。
 
简单的方法是在服务器端程序内建立一个发送缓冲队列,队列内每条数据都标明将要
发送给谁,这样可以实现先进先出的效果!
 
多人接受答案了。
 
后退
顶部