procedure TForm1.Button1Click(Sender: TObject);
begin
FSocket := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if FSocket = INVALID_SOCKET then
showmessage('ErrorCode'+inttostr(WSAGetLastError));
self.Button2.Enabled:=true;
end;procedure TForm1.Button2Click(Sender: TObject);
var
serverAddr: TSockAddrIn;
lastError: Integer;
begin
serverAddr.sin_family:= AF_INET;
serverAddr.sin_port:= htons(strtoint(self.Edit2.Text));//服务器端口
serverAddr.sin_addr.S_addr:= inet_addr(PAnsiChar(self.Edit1.Text));//服务器IP WinSock2.connect(FSocket,@serverAddr,SizeOf(serverAddr));
lastError := WSAGetLastError();
if lastError <> 0 then
showmessage('connect:'+inttostr(lastError))
else
begin
FConnected:=true;
showmessage('连接成功');
end;
end;procedure TForm1.FormCreate(Sender: TObject);
var
aWSAData: TWSAData;
begin
if WSAStartup($202, aWSAData) <> 0 then
ShowMessage('初始化WinSock2失败,请确认系统是否正确安装了WinSock2');
FSocket := INVALID_SOCKET;
FConnected:=false;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
closesocket(FSocket);
WSACleanup;
end;先点button1 再点button2.
上述代码在94%的机器上没有问题,都提示连接成功,但另外6台却错,就是这一句WinSock2.connect(FSocket,@serverAddr,SizeOf(serverAddr)),然后用
WSAGetLastError得到的返回值是2,请大家帮忙分析一下。
解决方案 »
- ftp上传文件
- 能否让软件里的窗体保持windows 经典样式的样子
- 怎么实现 关闭程序时候,跳出输入密码框,如果输入正确则退出,如果错误则回到程序界面
- dephi+vba高手请进!!!!!!!!
- 请问:OCX控件的接口函数修改后,在Delphi中应经过怎样的步骤重新调用新的接口?
- 引用TMenuItem的问题
- 求算法(老菜鸟都可以进)
- 如何在程序中写数据库sql server中username、password的输入?
- reportbuilder 10 中的memo在换的时候第二行出现乱码,求助!!
- 如何让EDIT控件有Alignment属性,不要别的控件
- borland公司网站打不开了
- ◆菜鸟问题:为何用流的方式读写文件有差异◆
是这回事,用工具查了一下,socket建立不了监听端口,但是什么原因引起的呢,怎么解决?
这是群里的一位兄弟歪打正着帮到我的忙,等他来接分,不来就改成散分贴了。哪位兄弟知道原理的,麻烦给讲一下。function TForm1.conn: Boolean;
var
SCI: sockaddr_in;
hostAddr: u_long;
begin
Result:= false;
try
if FConnected then
begin
Result:= True;
Exit;// 如果已经连接,则退出
end;
FSocket := socket(PF_INET,SOCK_STREAM,IPPROTO_IP); //创建socket
if (FSocket = INVALID_SOCKET) or (FSocket = SOCKET_ERROR) then
showmessage('ErrorCode:'+inttostr(WSAGetLastError)); sci.sin_family:= PF_INET;//定义协议簇
sci.sin_port:= htons(strtoint(self.Edit2.Text));
hostAddr:= inet_addr(PChar(self.Edit1.Text));
if hostAddr= -1 then
begin
closesocket(FSocket);
Exit;
end
else
sci.sin_addr.S_addr:= hostAddr; if connect(FSocket,sci,SizeOf(sci))<>0 then
begin
showmessage('connect:'+inttostr(WSAGetLastError));
closesocket(FSocket);
Exit;
end;
except
closesocket(FSocket);
Exit;
end;
FConnected:= true;
showmessage('连接成功');
Result:= True;
end;