erace99(龙行天下) 的代码试了一下,我是这样改写的,不过不管怎样,都是返回不成功!procedure TForm1.Button1Click(Sender: TObject); var SockAddr:TSockAddr; begin SockAddr.sin_family := AF_INET; SockAddr.sin_addr.S_addr := htonl(INADDR_ANY); SockAddr.sin_port := htons(1095); if bind(ServerSocket1.Socket.SocketHandle, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR then begin //Ok := True; showmessage('y'); //Break; end else begin showmessage('n'); end;end;
你初始化了winsock了吗???? wd:wsadata; wsastartup(2,wd);
function CheckFreePort(APort : Integer) :Boolean; var Wsd: WSAData; S: TSocket; SockAddr: TSockAddrIn; begin Result := Flase; if WSAStartup(MAKEWORD(2, 2), Wsd) <> 0 then Exit; try S := socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if S = SOCKET_ERROR then Exit; SockAddr.sin_family := AF_INET; SockAddr.sin_addr.S_addr := htonl(INADDR_ANY); SockAddr.sin_port := htons(APort); if bind(S, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR then begin Result := True; Break; end; end; closesocket(S); finally WSACleanup; end; end;
SockAddr.sin_addr.S_addr := htonl(INADDR_ANY);
SockAddr.sin_port := htons(Port); if bind(S, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR then
begin
Ok := True;
Break;
end;
winExec等函数都返回不了我想要的结果啊!
sundayboysII(空)说的应该很有道理,不过没做过,不知道有没有一些例程代码什么的参考一下!
var
SockAddr:TSockAddr;
begin SockAddr.sin_family := AF_INET;
SockAddr.sin_addr.S_addr := htonl(INADDR_ANY);
SockAddr.sin_port := htons(1095); if bind(ServerSocket1.Socket.SocketHandle, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR then
begin
//Ok := True;
showmessage('y');
//Break;
end
else
begin
showmessage('n');
end;end;
wd:wsadata;
wsastartup(2,wd);
function CheckFreePort(APort : Integer) :Boolean;
var
Wsd: WSAData;
S: TSocket;
SockAddr: TSockAddrIn;
begin
Result := Flase;
if WSAStartup(MAKEWORD(2, 2), Wsd) <> 0 then Exit;
try
S := socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if S = SOCKET_ERROR then Exit; SockAddr.sin_family := AF_INET;
SockAddr.sin_addr.S_addr := htonl(INADDR_ANY);
SockAddr.sin_port := htons(APort); if bind(S, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR then
begin
Result := True;
Break;
end;
end;
closesocket(S);
finally
WSACleanup;
end;
end;
你新发的代码我试了,其中不管什么端口,
bind(S, SockAddr, SizeOf(SockAddr))总是等于-1,不知是何故?