为什么我的客户端与服务端的socket控件不工作???(100分)

A

atomy

Unregistered / Unconfirmed
GUEST, unregistred user!
步骤1: 通过一个按钮把信息发送到服务端去.
// 发送信息到服务器端进行验证
ClientSocket1.Address := 192.168.0.12 ; //这是服务端的ip.
ClientSocket1.Active :=true;
clientsocket1.Socket.SendText('客户端发送信息');
//等待服务器端发回来的信息
步骤2:  
     服务端那里处理客户端发过来的数据.
  procedure TForm1.sersockClientRead(Sender: TObject;
       Socket: TCustomWinSocket);
       //处理指定事件.
       //然后返回一个字符串回到客户端.
socket.sendtext('服务器回发的信息');

步骤3:procedure TForm2.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
//等待服务器端发回来的信息
showmessage(socket.receivetext);
end;

       
问题: 可是好像第二步那里就没有反应(服务端没有收到客户端发送来的信息).
但是服务端与客户端是连上了的. 请帮分析一下我错在哪了?


 
问题出在第一步:
不要在clientsocket1.active := true以后直接调用sendtext
使active := true 只是试图连接,并没有立即连上,
sendtext 应该在 clientsocket1 的 connected 事件中调用
 
请问 那我原来这样的语句要怎么改才能正常使用?
ClientSocket1.Address := 192.168.0.12 ; //这是服务端的ip.
ClientSocket1.Active :=true;
clientsocket1.Socket.SendText('客户端发送信息');
 
首先,在原来的buttonclick事件中,删除
clientsocket1.sokcet.sendtext('客户端发送信息');
这一行
然后,选择clientsocket1控件,在事件中选择clientconnect事件,
添加事件处理函数clientsocket1connect
procedure TForm1.clientsocket1connect(sender : object ;
socket : tcustomwinsocket)
{
socket.sendtext('客户端发送信息');
}
建议多看delphi的帮助!!
 
建议将 ClientSocket1.Address := 192.168.0.12 ; //这是服务端的ip.
ClientSocket1.Active :=true;
连接服务器的代码放到Form的OnCreate或OnShow中,然后点击按钮直接发送就行了,
否则每次发送都要连一次。
 
不一定非要放在Connect事件中,可以放在另外一个按扭中,
在连接后,点击另外一个按钮,这样也不用总连接了
至于这个原因我也很想问问,我试过,在OPEN之后,等待一些时间,再写,但都失败了
好象OPEN和SEND不能放在一个过程中,不知有谁能解答一下,学习学习:)
 
我说过了,等多长时间都没用,网络连接是需要时间的,而且需要的时间不定,
并不是等一段时间就一定可以连上,必须在connect事件发生后才可以确保连上。
假如抛出异常,那么就是因为某种原因连不上。
 
有几个问题:
1、server和client都要设置同样的端口(port)号;
2、如果是非阻塞方式,
ClientSocket1.Active :=true;
clientsocket1.Socket.SendText('客户端发送信息');
这里应该是有问题的,因为socket的连接是需要时间的,在没有(或正在)连接时,
sendtext肯定是失败的。可以在这两个语句中加个时间延时。
 
看来可以用加个延时解决问题.
 
多人接受答案了。
 
顶部