关于IdTCPClient1按收数据的问题。

mayi 2005-11-08 05:34:34
发送代码:
IdTCPClient1.Host := '127.0.0.1';
IdTCPClient1.Port := 80;
IdTCPClient1.Connect;
IdTCPClient1.WriteBuffer(ms,ms.Size, true);
发送数据之后,是用IdTCPClient1.ReadBuffer(mp.memory^,mp.Size);接收数据吗?可是用这段代码后,就死机了,程序没响应,怎么解决呢?
...全文
552 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
将计就计123 2005-11-14
  • 打赏
  • 举报
回复
服务端必须是IDTCPSERVER吧
要是别的即使对CLIENT开放了端口,服务端又怎么知道如何处理CLIENT传来的信息呢
除非像楼上讲的你要做代理服务器啊
将计就计123 2005-11-13
  • 打赏
  • 举报
回复
顶,我也遇到了这样的问题 
关注
wizardqi 2005-11-09
  • 打赏
  • 举报
回复
看你使用了80断口恐怕对方是个WEB服务器,你不是要做代理服务器吧 ^_^
wizardqi 2005-11-09
  • 打赏
  • 举报
回复
首先确认一下你的客户端是否真正连上。再者即使服务器端不是你写的至少也要知道对方的协议(比如数据包的长度,或着数据格式),Indy是阻塞通讯模式,因此如果你在不知道通讯协议就会出现阻塞。
mayi 2005-11-09
  • 打赏
  • 举报
回复
已尝试用线程接收,也收不到。indy的Demo已看过了,不能解决问题。
IdTCPClient1.Host := '127.0.0.1';
IdTCPClient1.Port := 80;
IdTCPClient1.Connect;
IdTCPClient1.WriteBuffer(ms,ms.Size, true);
IdTCPClient1.ReadBuffer(mp.memory^,mp.Size);//在这里接收,死机,没响应。
  • 打赏
  • 举报
回复
客户端用线程读取数据
j建立个线程,读数据~ 看indy 提供的Demo~







-----------------------------------------------------------------------------------------------------------------------------------------
CSDN小猪手:方便查看,快速回复~~速度++~~~
下载:
http://www.vickyjam.com/blog/lbs/article.asp?id=165
zhuangbx220 2005-11-08
  • 打赏
  • 举报
回复
客户端用线程读取数据
mayi 2005-11-08
  • 打赏
  • 举报
回复
问题是,我的服务端不是我做的,也不是用IdTcpServer做的,是其它的应用软件,我只是模拟向它发送数据包而已,如果客户端和服务端都是自已做的,就没这么麻烦了。
wizardqi 2005-11-08
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, StdCtrls;

type
TForm1 = class(TForm)
IdTCPClient1: TIdTCPClient;
IdTCPServer1: TIdTCPServer;
SendBtn: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SendBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
with IdTCPServer1 do
begin
Bindings.Clear;
Bindings.Add.Port:=1981;
Active:=True;
end;
with IdTCPClient1 do
begin
Host:='127.0.0.1';
Port:=1981;
Connect;
end;
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
DataSize:Integer;
Buffer:String;
begin
with AThread.Connection do
begin
DataSize:=ReadInteger;
SetLength(Buffer,DataSize);
ReadBuffer(Buffer[1],DataSize);
Memo1.Lines.Add(Buffer);
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdTCPClient1.Disconnect;
end;

procedure TForm1.SendBtnClick(Sender: TObject);
var
Buffer:String;
begin
Buffer:='Test send buffer...';
with IdTCPClient1 do
begin
WriteInteger(Length(Buffer));
WriteBuffer(Buffer[1],Length(Buffer),True);
end;
end;

end.
wizardqi 2005-11-08
  • 打赏
  • 举报
回复
与IdTCPClient配套的是IdTCPServer,在它的OnExecute事件中你可以这样接收数据:
with AThread.Connection do
begin
ReadBuffer(Buffer,Buffersize);
end;
当然现实中并是这么简单,这里给你举个例子吧。
mayi 2005-11-08
  • 打赏
  • 举报
回复
分不够可以增加。说明一下服务端是其它的网络软件服务器,不是用IdTCPServer做的。我用Iris来载取数据,已知道发送成功,而且服务器也返回信息了,但用IdTCPClient1.ReadBuffer(mp.memory^,mp.Size);就是接收不到,怎么才能接收呢?

1,593

社区成员

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

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