怎么动态创建的clientSocket连不上ServerSocket? (5分)

  • 主题发起人 主题发起人 lncd
  • 开始时间 开始时间
L

lncd

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么动态创建的clientSocket连不上ServerSocket?代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1:=TClientSocket.Create(nil);//ClientSocket1在private中声明的
ClientSocket1.ClientType:=ctNonBlocking;//Server端采用stNonBlocking
//Client和Server端分别采用ctBlocking和stThreadBlocking就能连通,为什么?
ClientSocket1.Host:='ln';
ClientSocket1.Port:=4000;
ClientSocket1.Active:=True;
if ClientSocket1.Active then memo1.Lines.add('连接成功');//但总是连不成功
end;
 
一个利用WinSocket控件传送文件的Demo。
http://www.aidelphi.com/6to23/docu/transfile.zip
看这个例子对你有帮助没有?
 
非阻塞模式:另一端数据来临就会触发一个接收事件,自己写代码接收去吧[:D]
阻塞模式:生成一个线程死读,一旦有数据,代码往下执行,就去调用主线程中的函数或过程吧!
 
好象在socket的每一端都有一个缓冲区,用来存放另一端发来的数据。
如何知道这个缓冲区的大小呢。
还有,这个缓冲区只要存在,它就应该是有数据的呀,哪怕全是0000
 
刚才我用死循环来往缓冲区里写数据,然后一次取出来,有8K数据,
我想这就是缓冲区大小了。
 
怎么文不对题?编辑过了?
ClientSocket1.Active:=True;
if ClientSocket1.Active then memo1.Lines.add('连接成功');//但总是连不成
这段代码有问题!
异步模式下,ClientSocket1.Active:=True;以后马上执行下一句,时间不超过0.00001秒吧(或许更少),但是这时候网络还没真正连接,当然不行哦!
要改为:
ClientSocket1.Active:=True;
然后在onConnect事件中加入
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.add('连接成功');
end;
如果有错误:
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
memo1.Lines.add('连接失败');
ErrorCode:=0;
end;
 
谢谢,学习中。
 
后退
顶部