我用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;
uj5u.com熱心網友回復:
一個連接被對方重設。一個建立的連接被遠程主機強行關閉,若遠程主機上的行程例外終止運行(由于記憶體沖突或硬體故障),或者針對套接字執行了一次強行關閉,便會產生10054錯誤.uj5u.com熱心網友回復:
這個我知道,但是代碼只有這么多,我不知道是哪里有錯,只知道原因但是解決不了。。。uj5u.com熱心網友回復:
求助啊,高手們!!uj5u.com熱心網友回復:
我也遇到了同樣的問題,不知道怎樣解決,不知樓主是否已經解決此問題?如果解決了,請不惜賜教,謝謝。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137853.html
標籤:網絡通信/分布式開發
