DFW们元宵节快乐(socket问题---简单) ( 积分: 100 )

  • 主题发起人 主题发起人 hongfeng0727
  • 开始时间 开始时间
H

hongfeng0727

Unregistered / Unconfirmed
GUEST, unregistred user!
帮小弟看看下面的代码问题出在哪里?
var
lHandle: Integer;
sockets: TCustomWinSocket;
begin
lHandle := 123456.; //已经连接的一个handle
sockets := TCustomWinSocket.Create(lHandle);
sockets.SendText('dddd'); //此处出错{尝试操作的对象不是通讯端(10038)}
end;

谢谢了,富翁们佳节快乐。
 
既然是这样那SocketHandle肯定是错误的Handle,如果你确定
lHandle := 123456.; //已经连接的一个handle ,
如果你确定 是一个已经连接的SocketHandle, 请将代码贴出来看看.

下面的代码,是你的代码会调用的函数. 加了 "*****" 样的标识的地方是关健地方. 所以只有你的SocketHandle存在问题.

constructor TCustomWinSocket.Create(ASocket: TSocket);
begin
inherited Create;
Startup;
FSocketLock := TCriticalSection.Create;
FASyncStyles := [asRead, asWrite, asConnect, asClose];
FSocket := ASocket; *****
FAddr.sin_family := PF_INET;
FAddr.sin_addr.s_addr := INADDR_ANY;
FAddr.sin_port := 0;
FConnected := FSocket <> INVALID_SOCKET; *****
end;

function TCustomWinSocket.SendText(const s: string): Integer;
begin
Result := SendBuf(Pointer(S)^, Length(S));
end;

function TCustomWinSocket.SendBuf(var Buf; Count: Integer): Integer;
var
ErrorCode: Integer;
begin
Lock;
try
Result := 0;
if not FConnected then Exit; *****
Result := send(FSocket, Buf, Count, 0); *****
if Result = SOCKET_ERROR then
begin
ErrorCode := WSAGetLastError;
if (ErrorCode <> WSAEWOULDBLOCK) then
begin
Error(Self, eeSend, ErrorCode);
Disconnect(FSocket);
if ErrorCode <> 0 then
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(ErrorCode), ErrorCode, 'send']);
end;
end;
finally
Unlock;
end;
end;
 
多谢 iceapi
我详细看看。
 
后退
顶部