求socket error 10054的解决方法
我用delphi2010+indy10开发通讯软件。以前参照例子做客户端给服务端发信息正常的,但是系统重装后,client连接是成功的,但是发送信息就出现socket error 10054,只要涉及到客户端给服务端发数据就会报这个错误。网上查了很多都没解决。不是防火墙的缘故。
服务端代码如下:
procedure TForm1.FormCreate(Sender: TObject);
var myini:Tinifile;
filename:string;
ip,port:string;
begin
Filename:=ExtractFilePath(Paramstr(0))+'deploy.ini';
myini:=Tinifile.Create(filename);
ip:=myini.Readstring('deploy','ip','1');
port:=myini.Readstring('deploy','port','2');
if ip='1' then
begin
application.MessageBox('ip地址未定义','警告信息',MB_ICONWARNING);
application.Terminate;
end;
if port='2' then
begin
application.MessageBox('端口未定义','警告信息',MB_ICONWARNING);
application.Terminate;
end;
with IdTCPServer1.Bindings.Add do
begin
IP:=ip;
Port:=port;
end;
idtcpserver1.OnExecute:=IdTCPServer1Execute;
memo1.Lines.Clear;
myini.Free;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
IdTCPServer1.Active:=true;
end;
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var Swp:String;
begin
try
AContext.Connection.IOHandler.CheckForDisconnect(True, True);
Swp:=AContext.Connection.IOHandler.ReadLn();
if(Swp<>'')then
AContext.Connection.IOHandler.WriteLn('服务器已经收到您发来的信息:'+Swp);
Memo1.Lines.Add(Swp) ;
finally
end;
end;
客户端代码如下:
procedure Tloginform.Button2Click(Sender: TObject);//连接
begin
try
if not (dm.DataModule1.IdTCPClient1.Connected) then
begin
dm.DataModule1.IdTCPClient1.Connect;
dm.DataModule1.IdTCPClient1.IOHandler.writeln('lianjie');
ShowMessage('连接成功');
end;
except
ShowMessage('连接失败');
end;
end;
procedure Tloginform.Button4Click(Sender: TObject);//发信息
var
Str:String;
begin
Str:=Edit1.Text;
if(dm.DataModule1.IdTCPClient1.Connected) then
dm.DataModule1.IdTCPClient1.IOHandler.writeln(Str);
end;
数据模块代码(idtcpclient放在数据模块中):
procedure TDataModule1.DataModuleCreate(Sender: TObject);
var myinifile:Tinifile;
filename:string;
begin
Filename:=ExtractFilePath(Paramstr(0))+'cdeploy.ini';
myinifile:=Tinifile.Create(filename);
ip:=myinifile.Readstring('deploy','ip','');
port:=myinifile.Readstring('deploy','port','');
servername:=myinifile.Readstring('deploy','servername','');
SocketConnection1.Address:=ip;
SocketConnection1.ServerName:='Project1.myproject';
SocketConnection1.ServerGUID:='{5D6A3395-4613-41E1-ABDF-1E71CAAF85A1}';
ClientDataSet1.RemoteServer:=SocketConnection1;
ClientDataSet1.ProviderName:='DataSetProvider4';
idtcpclient1.Port:=strtoint(port);
idtcpclient1.Host:=ip;
if ip<>'' then
begin
SocketConnection1.Connected:=true;
end;
myinifile.Free;
end;