Delphi Socket编程问题(200分)(200分)

  • 主题发起人 主题发起人 Casino
  • 开始时间 开始时间
C

Casino

Unregistered / Unconfirmed
GUEST, unregistred user!
BR正在写一段TCP/IP编程,应用服务器端用UNIX操作系统实现Server端的业务,终端用Delphi的TClientSocket控件实现,把ClientSocket的ClientType属性设置为ctNonBlocking,当终端发给Logon消息请求后,应用服务器成功发了成功登录的消息,但是在终端的OnRead事件无法取出ReceiveText,而ClientType属性设置为ctBlocking,发完Logon消息,立马可以收到应用服务器消息,请问在非阻塞情况ctNonBlocking终端如何接收消息,然后执行命令和处理业务,用循环接收不可行,后面用Timer控件的OnTimer去处理,但会很频繁地发消息给应用服务器,也不可取,请问各位大虾如何处理不断接收应用服务器消息,可发给我信箱afrey@sina.com,在此先谢了!!!!!!!!!![:)]
 
在OnRead事件中处理。
 
在ctNonBlocking情况下,在OnRead事件不会发
 
对,似乎需要自己建立线程管理Socket
 
老大你说反了吧.
用一个ClientSocket,
设属性如下:
host:=163.net;
Active;=True;

ctBlocking时用这个.
------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
// clientsocket1.Active:=true;

memo1.lines.add(clientsocket1.Socket.ReceiveText);
clientsocket1.Socket.SendText('helo 163'#13#10);
memo1.lines.add(clientsocket1.Socket.ReceiveText);

end;

ctNonBlocking下用这个
--------------------------
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.lines.add('1-'+clientsocket1.Socket.ReceiveText);

end;
 
sorry:

属性中的port:=25;
这就是email的客户端了.
 
不行,没说反,请问线程实现接收,如何实现?有没有原代码?200分全给你
 
行的,改port为25后再试一下.
我要下班了代码一会发.
 
代码已经发给你应该没问题了吧?当然了你要先联上internet,还有我的程序是delphi6的
其他版本的可能编译不了.
 
不行,我代理上网的,ADSL!有没有线程实现的代码
 
你看过代码没有?
 
winsocket在ctNonBlocking(非阻塞)情况下是通过消息处理的,根本不用多线程.
这是方便之处不应使用ctBlocking.好了这个问题实在是清楚了.
有空去我的http://clq.51.net留言.(另:建议看一下相应书籍)
 
按你的方法可以,但是我的软件动态创建的,设ClientType为ctNonBlocking,
不能收取消息,要用Timer控件设置10/1000秒收取消息,不是很好,把其他
响应windowspi屏蔽了(如按钮点击事件无法再使用)!
 
OnRead事件
 
是呀ClientType为ctNonBlocking时要在OnRead事件
中读数据嘛!!前面给出的代码不是已经有了吗?唉!
 
行了,要不给分,要不去我的http://clq.51.net留言.支持一下小弟刚开张的竹叶.:)
 
我用OnRead读不出来,你的163倒可以!
 
非阻塞方式下肯定可以用onread 事件接收,
服务器的程序可以看吗?
他是不是用writeln写socket 口? 用write 可能会有问题
 
HubHub,是用write写的,而且是收到终端消息才发消息, 服务器该如何写,可以指导吗?
 
急呀,就是不成功,OnRead事件读不出来!!!!
 
后退
顶部