Socket.Sendtext()未完成时,下一个对该Socket的发信要求来了怎么办?(100分)

  • 主题发起人 主题发起人 yshu
  • 开始时间 开始时间
Y

yshu

Unregistered / Unconfirmed
GUEST, unregistred user!
写一聊天程序,服务器ServerSocket, stNonBlocking非阻塞通信以节省开销,负责转发聊
天信息到每一个客户端socket,有可能同时有几条信息调用sendtext()同时往一个客户
端Socket发信息。

如何在服务器对某客户端Socket Sendtext()未完成时,下一个对该Socket的发信要求能
等待完成后才对该Socket发信息?
 
非阻塞的还会有问题么?它是写到一段系统内存区域当中。
 
用队列(TStringList is OK)不就行了?一个过程负责添加,一个过程负责读取,可以容纳任意个待发送信息。
 
socket有这种队列机制!好象是支持5个吧
 
关注。。。
 
delphi中对SOCKET的队列机制是如何包装的,如果用单一线程处理连接,而且处理比较耗时
,则连接将排队,那么队列程度在那儿可以设置?
 
利用多线程不就完了吗?
 
在客户端程序中进行如下调用时
clientsocket1.Socket.SendText('gets');
clientsocket1.Socket.SendText('gets');
clientsocket1.Socket.SendText('gets');
服务端接收时会出现getsgets之类的现象,这可能是因为当缓冲区内的数据还未发送完时,
又将新的文本放入缓冲区,计算机把它也当成同一批数据进行处理的缘故。
为避免这个现象的发生,在程序内可采用一来一回“抛球”式的做法:
客户端 服务端
clientsocket1.Socket.SendText('data1') socket.ReceiveText;
socket.sendtext('ok');
socket.receivetext;
clientsocket1.Socket.SendText(' data2')
socket.ReceiveText;
socket.sendtext('end');
socket.receivetext;

 
接受答案了.
 
后退
顶部