handle为什么没有执行?

40 views
Skip to first unread message

心殇

unread,
Jul 1, 2009, 4:27:48 AM7/1/09
to spserver
运行了testchat的例子,handle()方法没有进入?
我按照上面的那个例子,自己写了个简单的server,也是不执行handle()方法,造成数据不能接收到!请问是否需要有其他的设置么?

lau stephen

unread,
Jul 1, 2009, 5:07:30 AM7/1/09
to spse...@googlegroups.com
请问用的是哪个 MsgDecoder ? Client 端是怎么发送数据的?
handle 方法没有执行,有可能是因为 Client 发送的数据没有满足 MsgDecoder 的要求。

2009/7/1 心殇 <sbf....@gmail.com>:

心殇

unread,
Jul 1, 2009, 5:20:43 AM7/1/09
to spserver
SP_LineMsgDecoder, testchat这个例子没有改动,客户端是在windows上运行的,发送的是普通的字符串。在redhat
上也试过了。
为 Client 发送的数据没有满足 MsgDecoder 的要求。这句话是什么意思呢?

lau stephen

unread,
Jul 1, 2009, 5:26:15 AM7/1/09
to spse...@googlegroups.com
LineMsgDecoder 是要遇到 \n 才会认为是一个完整的 message ,至于得到一个完整的 message 了,才会交给 handle 。

2009/7/1 心殇 <sbf....@gmail.com>:

心殇

unread,
Jul 1, 2009, 5:32:14 AM7/1/09
to spserver
[inspiron@localhost spserver]$ ./testchat
testchat[4697]: Listen on port [5555]
testchat[4697]: [ex@work] Thread #-1208964208 has been created for
executor
testchat[4697]: [ex@act] Thread #-1219454064 has been created for
executor
testchat[4697]: [tp@work] create thread#-1229943920
SYS : 1024 online
SYS : 1025 online
testchat[4697]: session(1025.0) read error, errno 0, status 0
SYS : 1025 error offline
testchat[4697]: session(1025.0) invalid, unknown FROM
testchat[4697]: session(1025.0) error, r 8(0), w 52(0), i 8, o 0, s 1
(1023)
SYS : 1025 close
testchat[4697]: session(1024.0) read error, errno 0, status 0
SYS : 1024 error offline
testchat[4697]: session(1024.0) invalid, unknown FROM
testchat[4697]: session(1024.0) error, r 6(0), w 97(0), i 6, o 0, s 0
(1024)
SYS : 1024 close

服务端没有进入handle(),所以没有执行广播函数。造成我的客户端没有接收到数据!下面是我客户端的就收情况
Welcome 1024 to chat server, enter 'quit' to quit.
SYS : 1025 online
SYS : 1025 error offline
//1024发送的是asdasd

Welcome 1025 to chat server, enter 'quit' to quit.
//1025发送的是12345678,然后就退出了

可以看出两个客户端都没有接收到对方的数据!没有执行handle()

lau stephen

unread,
Jul 1, 2009, 5:35:19 AM7/1/09
to spse...@googlegroups.com
客户端发送的时候,最后面有没有加 \n ,就是换行符

2009/7/1 心殇 <sbf....@gmail.com>:

心殇

unread,
Jul 1, 2009, 6:30:00 AM7/1/09
to spserver
哦,也就是说每次发送数据后,在程序里要为发送的字符串加一下'\n',这个是LineMsgDecoder必须要的,对吧!
但是我在windows上做网络发送数据的系统时没有加过'\n',都是发的什么就传送什么。

明天再试了,我会继续反馈,谢谢!

lau stephen

unread,
Jul 1, 2009, 7:07:44 AM7/1/09
to spse...@googlegroups.com
这个是因为 LineMsgDecoder 是这样设计的,如果你希望收到任何东西都调用 handle ,那么用 DefaultMsgDecoder 吧。

MsgDecoder 就是用来判断是否受到一个完整包的。DefaultMsgDecoder 是收到任何东西都当作是完整包。

2009/7/1 心殇 <sbf....@gmail.com>:

心殇

unread,
Jul 1, 2009, 9:26:13 PM7/1/09
to spserver
两个都试过了,DefaultMsgDecoder 很好用,能接收。LineMsgDecoder必须加入"\n"。
但是上面两个类的getMsg方法感觉不一致,返回值不同。
DefaultMsgDecoder 的getMsg()返回的是SP_Buffer,还需要getBuffer()。
LineMsgDecoder的getMsg()返回的是char*,就可以直接取到数据了。

lau stephen

unread,
Jul 1, 2009, 10:01:13 PM7/1/09
to spse...@googlegroups.com
这些现有的 MsgDecoder 都是为了作为示范而实现的。
一个真正的应用程序,需要根据它的协议设计来重新实现 MsgDecoder 。

2009/7/2 心殇 <sbf....@gmail.com>:

Message has been deleted

心殇

unread,
Jul 1, 2009, 10:34:17 PM7/1/09
to spserver
看了 http://iunknown.javaeye.com/blog/59804 了,现在都明白了!谢谢!
Reply all
Reply to author
Forward
0 new messages