idtcpserver与clientsocket通信(80分)

  • 主题发起人 主题发起人 asnychen
  • 开始时间 开始时间
A

asnychen

Unregistered / Unconfirmed
GUEST, unregistred user!
以前用的是TClientsocket和TServersocket,后来改成INDY的IDTCPServer和IDTCPClient。
以前有程序的客服端是用的TClientsocket写的,现在我想把服务端改成IDTCPServer这个,可是为什么,TClientsocket连接不上IDTCPServer,更不用说收发数据了,网上也没找到答案,请高手帮帮忙!!
我用的是D7
 
地基与大厦的问题。
 
你的回答太深奥了
 
有高手指导下吗
 
肯定是可以的,你的写法一定有问题:
举个例子:
你的IDtcpserver监控端口8088(当然记得给idtcpserver赋个iohandler值),那么你的clientsocket就可以用如下的方式连接它!
b:=tclientsocket.Create(self);
b.Host:='127.0.0.1';
b.Port:=8088;
b.ClientType:=ctNonBlocking;
b.active:=true;
 
TO
qnaqbgss

你说“给idtcpserver赋个iohandler值”,赋什么值不太明白,能说明下吗??
 
Indy I/O Handlers 里的TIDiohandler
 
我加入了一个IdServerIOHandlerSocket,idtcpserver的IOHandler选择上他后,clientsocket可以连接上idtcpserver了,在idtcpserver的ONConnect里加入
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
with AThread.Connection do
begin
writeln('OK');
end;
end;
ClientSocket的OnRead事件加入下面代码
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
if socket.ReceiveLength > 0 then
memo2.Lines.Add(socket.ReceiveText) ;
end;
idtcpserver可以发送数据到ClientSocket,ClientSocket也可以正确接收到数据。。
但是我用ClientSocket发送数据到idtcpserver时就不行了,为什么呢??
procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText('1111');
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
buf : string;
begin
with AThread.Connection do
begin
buf:=Readln();
memo1.Lines.Add(buf);
writeln('收到了');
end;
end;

为什么在ClientSocket连接上IdTCPServer时,IdTCPServer返回给他一条信息,他能收到,而ClientSocket在按照同样的方式发送数据给IdTCPServer,确不成功呢??
 
不可能吧,除非你自己定义了协议!
 
我没有自定义协议.....[:(]
 
为什么在ClientSocket连接上IdTCPServer时,IdTCPServer返回给他一条信息,他能收到,而ClientSocket1.Socket.SendText('1111');
给IdTCPServer,IdTCPServer没有反映??
 
看一下socket.pas的sendtext代码!
 
可能是因为TClientSocket和TdTCPServer直接这样发送,
你把TClientSocket换成TdTCPClient是肯定没问题的.
我最近也在学网络通信,不过indy10,与indy9有些不同.
 
多人接受答案了。
 
后退
顶部