TcpRawClient碰到问题,求帮忙看看。

xe7

Registered
Registered
操作步骤:
1、运行服务端后
2、客户端改一下ip,编译运行
3、onCreate事件中,实现连接+发送登录请求消息,不接收
4、点击button1,发送一条普通消息给服务端,并立即返回(接收到了登录返回的消息)
点击button3,接收消息(接收到了上一条消息的返回)
再次点击button3,客户端无响应。。
 

附件

  • testRaw.rar
    863 KB · 查看: 2647

xe7

Registered
Registered
是不是像indy tcp client那样Socket.InputBufferIsEmpty,receive的时候做一下判断。这样就可以在timer里面循环取数据了,算是网络上那个伪非阻塞式的实现。。
 

天地弦

Moderator
管理成员
Moderator
FRemoteSvr.DoRecvMsg(); // 是一个阻塞接收的过程, 只有会接收到一个完整数据包才会执行

FormCreate里面。
1. FRemoteSvr.DoSendMsg(11, 'doudou.login'); // 服务端会返回一条数据包

2. Button1
FRemoteSvr.DoSendMsg(5, Edit1.Text); // 服务端会返回一个数据包
lRtnMsg:= FRemoteSvr.DoRecvMsg(); // 接收掉第一个数据包。
SetNetMsg(lRtnMsg);

3 Timer1.Enabled:= True;
Timer1 事件里面接收掉一个数据包 //Button1的数据包

4. Button3Click
lRtnMsg:= FRemoteSvr.DoRecvMsg(); // 没有任何数据包返回了,就阻塞了主线程
SetNetMsg(lRtnMsg);
 
顶部