求socket error 10054的解决方法

lts_luckyboy 2010-12-17 07:49:41
我用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;
...全文
3983 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xokai 2013-03-28
  • 打赏
  • 举报
回复
我也遇到了同样的问题,不知道怎样解决,不知楼主是否已经解决此问题?如果解决了,请不惜赐教,谢谢。
lts_luckyboy 2010-12-19
  • 打赏
  • 举报
回复
求助啊,高手们!!
lts_luckyboy 2010-12-18
  • 打赏
  • 举报
回复
这个我知道,但是代码只有这么多,我不知道是哪里有错,只知道原因但是解决不了。。。
xjq2003 2010-12-18
  • 打赏
  • 举报
回复
一个连接被对方重设。一个建立的连接被远程主机强行关闭,若远程主机上的进程异常终止运行(由于内存冲突或硬件故障),或者针对套接字执行了一次强行关闭,便会产生10054错误.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧