用ServerSocket时(采用多线程技术),服务端窗口不时弹出窗口“Read error 64 指定的网络名不可再用”。请高手帮忙分析原因。
解决方案 »
- 怎么让程序在运行后马上显示两个窗体
- C/S模式,数据处理
- 想把返回的值写到数组里,然后调用一个处理函数
- 如何动态加载DLL文件,实现如下功能
- 考得不错,发个邪恶的小玩意(别找我要分,我快穷死了)
- 我想在一个界面中点击一个按纽连接到一个网页,怎么实现啊!!
- Delphi+Oracle(ADO组件),C/S结构的应用程序问题:1)如何无需安装Oracle客户端?;2)如何实现访问远程数据库?
- 如何高速采样
- SQL Server做单机版数据库的问题?
- 挑戰各路高手,關于sql的alias問題,98分呈上!!
- 求Image + Label 的组合控件......
- 请教在statusbar中加入ProgressBar!
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;