动态创建的ClientSocket为什么不能SendText?(50分)

  • 主题发起人 主题发起人 porsche
  • 开始时间 开始时间
P

porsche

Unregistered / Unconfirmed
GUEST, unregistred user!
动态创建的ClientSocket为什么不能SendText?
procedure TForm1.Button1Click(Sender:TObject); //发送不了
var ClientSocket2:TClientSocket;
begin
ClientSocket2:=TClientSocket.Create(Application);
try
ClientSocket2.Address:='192.168.0.10';
ClientSocket2.Port:=2161;
ClientSocket2.Open;//or ClientSocket2.Active:=True;
ClientSocket2.Socket.SendText('中华人民共和国');
finally
ClientSocket2.Free;
end;
end;


[red]源文件请下载(161K) [/red]http://www.wansoft.com.cn/porsche/download/SocketDll.zip
 
ClientSocket2.Open;//or ClientSocket2.Active:=True;
ClientSocket2.Socket.SendText('中华人民共和国');
这两句最好分开放,最好在别的事件中去SendText,因为open以后,还没有连接,无法发送
 
ClientSocket2.Open后在onconnect事件中ClientSocket2.Socket.SendText('中华人民共和国');,记住,这是异步模式!
 
TO MASM,这个我也想到了,可是我怎么知道它什么时候能联接上呢?网络太慢或者其它
原因?
延时几秒钟也不是个好办法啊!
我是想做在动态链接库里
 
SendTxt()会返回执行后发送的字节数
所以你只要在程序中加上:
try
while true do
begin
if ClientSocket2.Socket.SendText('中华人民共和国')>0 then//这表示已连接上了,因为只有连接上了才可能发出数据
begin
//这里做你该做的事
break;
end;

end;
except
....
 
to amdcwf,按你的 ClientSocket会不停的发送 中华人民共和国
陷入一个死循环
 
sendtext前加一句

while not ClientSocket2.Socket.Connected do
begin
Application.ProcessMessages;
sleep(10);
end;
ClientSocket2.Socket.SendText('中华人民共和国');
 
loco,你的也是死循环

我感觉就是 消息还没发送完,就被FREE掉了
 
这里的人气怎么这么差啊?
 
你可以设置一个标志位在onconnect事件中,如果成功,则发送
while not isConnect do
begin
Application.ProcessMessages;
//OnRead(application, FClientsocket.Socket);
end;
socket.Socket.SendText(aStr)
 
to 不知道_0909,你的我也试过,一样的没反应
 
你可以在TServerSocket方设置一个简单的问答,当有一个新的TClientSocket连接上来时,就向它发送一个已接受连接的标志,然后TClientSocket接收到服务器已接受的标志后再发送数据。
 
TO ego,
问题是这个 ClientSocket我不是用于窗口对象中的,是用于动态链接库中

要在这个过程或函数中动态创建,
同时必须也要在这个过程或函数中释放的
 
呵呵,真巧, http://www.delphibbs.com/delphibbs/dispq.asp?lid=2140071
 
多人接受答案了。
 
后退
顶部