SOCKET问题

xwm21cn 2003-11-22 12:56:16
用ServerSocket时(采用多线程技术),服务端窗口不时弹出窗口“Read error 64 指定的网络名不可再用”。请高手帮忙分析原因。
...全文
101 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwm21cn 2003-11-27
  • 打赏
  • 举报
回复
现在没有答案,我先结贴,然后再发一遍
xwm21cn 2003-11-25
  • 打赏
  • 举报
回复
不好意思,这两天没上来看,现在将服务断的源码部分贴上来,请大侠们帮我看看,如果我客户端直接关闭程序,就会出现错误“Read error 64 指定的网络名不可再用”,我觉得是客户端SOCKET异常关闭后,服务端没有关闭SOCKET,而继续在该SOCKET上读写,但该怎么处理呢?



procedure TMainform.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread := TClientThread.Create(False, ClientSocket);
end;


Procedure TClientThread.ClientExecute;
begin
while Not Terminated And ClientSocket.Connected Do
begin
Synchronize(HandleRecvClient); 处理收到的消息
end;
end;

// 处理从前台发来的消息
Procedure TClientThread.HandleRecvClient;
var
i,j:integer;
ReceiveBuffer : BufferType;
SocketStream : TWinSocketStream;
BytesRead : Integer;

begin
try
if not Assigned(SocketStream) then
begin
SocketStream := TWinSocketStream.Create(ClientSocket, 60000);
end;
FillChar(ReceiveBuffer, sizeof(ReceiveBuffer), 0); { initialize the buffer }

{ give the client 5 seconds to start writing }
If SocketStream.WaitForData(5000) Then
Repeat
BytesRead := SocketStream.Read(ReceiveBuffer,SizeOf(ReceiveBuffer));
if BytesRead > 0 then
begin
// ..................
// 处理接收到的数据
end
else
begin
{ if can't read in 6 seconds }
ClientSocket.Close; { close the connection }
end; // if BytesRead > 0
Until Not SocketStream.WaitForData(2000);
finally
SocketStream.Free;
end;
end;



SuperSeventh 2003-11-23
  • 打赏
  • 举报
回复
学习!
angelior 2003-11-23
  • 打赏
  • 举报
回复
下一位
indexhome 2003-11-23
  • 打赏
  • 举报
回复
不知道你代码里是怎么写的,最好贴出来让大家看看再说!
我现在也做这个,来研究!
kw123 2003-11-22
  • 打赏
  • 举报
回复
可能是连接后没有断开再连,最好代码发过来看看
nhdj 2003-11-22
  • 打赏
  • 举报
回复
不清楚,顶一下
crkjqwm 2003-11-22
  • 打赏
  • 举报
回复
发送代码过来看看

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧