Z
zyyjc
Unregistered / Unconfirmed
GUEST, unregistred user!
现在公司要做一个项目,已经定下来用Socketconnection
当把SocketConnection封装到Dll中遇到一个问题
问题如下:
当客户端正在正常运行时(调用Dll中的Socketconnection),把Scktsrvr服务器强制关闭,此时客户端报“远程强迫关闭了主机”错误,然后客户端退出的时候没有响应
代码调试发现问题如下(部分代码):
DLL部分:
//初始化Socketconnection(运行正常)
function IniSckt(PApplication: THandle;ServerNameOrIP: WideString;
ServerPort: integer): Boolean;
begin
try
Application.Handle := PApplication;
FServerNameOrIP := ServerNameOrIP;
FServerPort := ServerPort;
if not Assigned(Sckt) then
Sckt := TSocketConnection.Create(Application);
Sckt.Host := FServerNameOrIP;
Sckt.Port := FServerPort;
sckt.ServerGUID := '{D6B81A8D-6B7C-47EE-9EF4-2CAB04BDB5DA}';
sckt.open;
Result:=True;
except
Result:=False;
end;
end;
function FreeSckt: Boolean;
stdcall;
begin
Result := False;
try
if assigned(sckt) then
//显示Sckt.connected为True(这里应该为False才对,哪位大富翁能解答)
begin
sckt.connected:=False;
//调试到这里就运行不了了(为什么会停在这呢?)
FreeAndNil(Sckt);
end;
Result := True;
except
end;
end;
EXE部分:
procedure TForm3.FormShow(Sender: TObject);
begin
if not IniSckt(Application.Handle, '127.0.0.1', 10001) then
begin
ShowMessage('连接服务器失败!');
abort;
end;
end
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
FreeSckt;(客户端关闭的时候运行到这里就不动了,DLL中的代码见上面)
end;
各位大富翁帮帮忙看看啊,搞了好几天都没有头绪啊,实在是搞不定了,请求帮助。
当把SocketConnection封装到Dll中遇到一个问题
问题如下:
当客户端正在正常运行时(调用Dll中的Socketconnection),把Scktsrvr服务器强制关闭,此时客户端报“远程强迫关闭了主机”错误,然后客户端退出的时候没有响应
代码调试发现问题如下(部分代码):
DLL部分:
//初始化Socketconnection(运行正常)
function IniSckt(PApplication: THandle;ServerNameOrIP: WideString;
ServerPort: integer): Boolean;
begin
try
Application.Handle := PApplication;
FServerNameOrIP := ServerNameOrIP;
FServerPort := ServerPort;
if not Assigned(Sckt) then
Sckt := TSocketConnection.Create(Application);
Sckt.Host := FServerNameOrIP;
Sckt.Port := FServerPort;
sckt.ServerGUID := '{D6B81A8D-6B7C-47EE-9EF4-2CAB04BDB5DA}';
sckt.open;
Result:=True;
except
Result:=False;
end;
end;
function FreeSckt: Boolean;
stdcall;
begin
Result := False;
try
if assigned(sckt) then
//显示Sckt.connected为True(这里应该为False才对,哪位大富翁能解答)
begin
sckt.connected:=False;
//调试到这里就运行不了了(为什么会停在这呢?)
FreeAndNil(Sckt);
end;
Result := True;
except
end;
end;
EXE部分:
procedure TForm3.FormShow(Sender: TObject);
begin
if not IniSckt(Application.Handle, '127.0.0.1', 10001) then
begin
ShowMessage('连接服务器失败!');
abort;
end;
end
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
FreeSckt;(客户端关闭的时候运行到这里就不动了,DLL中的代码见上面)
end;
各位大富翁帮帮忙看看啊,搞了好几天都没有头绪啊,实在是搞不定了,请求帮助。