我这里有个办法,不是很精巧,但在使用TServerSocket(或TClientSocket)的情况下却是
没有办法的办法。由于控件在打开端口时已经调用了WSAGetLastError(),所以我无法通过自
已调用这个函数来获取错误结果了,只能从Exception的Message里取得。
//下面的代码需要引用WinSock单元
procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Port := StrToInt(Edit1.Text);
try
ServerSocket1.Open;
except
on E: ESocketError do
begin
if (Pos(IntToStr(WSAEADDRINUSE), E.Message)>0) then
MessageBox(Handle, '端口已被占用!', 'SockServer', MB_ICONERROR);
end;
end;
end;
上面的程序也是能够正常获取结果的,但如果使用WinSock API来编写程序,就可以通过
WSAGetLastError()来获取更精确的结果,但估计多数人是不喜欢使用API来编写Socket程序
的(我喜欢)。