SOS-关于Socket类接收的问题
大家好,求知道的朋友帮助一下小弟,不胜感激!
问题:
需要访问一个目标系统,应该不是基于TelNet的协议的,地址/端口:192.168.1.3 / 4900。
我使用Windows自带的Telnet进行调试, 只要打开Telnet后输入 " o 192.168.1.3 4900"就可以连接
上目标,不需要登陆,连接后输入指令Help,自动返回:
XXXXX
YYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZ
CCCCCCCCCCCCCCCCCCCCCC
但是因为以后要自动控制连结和通信,所以我需要自己编写一个类似elNet的程序,采用.Net
的Socket类编写(C#),便写好之后,为了调试,做了个类似Windows自带的Telnet的Console程序
,问题出现了:
连接成功后,发送指令Help\r\n,返回
XXXXX
再发送空指令过去(即只有"\r\n")返回剩下的部分:
ZZZZZZZZZZZZZZZZZZZZZZZ
CCCCCCCCCCCCCCCCCCCCCC
但是我如果用它访问其他电脑(端口23)(通过TelNet协议),可以完全和Windows自带的Telnet一样.
分析:
我发现访问电脑和我测试的目标系统(192.168.1.3 / 4900) 有一点不一样,电脑会在有一个TelNet协议协商的过程,而目标系统没有,可能因为目标系统不是基于TelNet协议.
查看MSDN:
EndReceive 方法将一直阻止到有数据可用为止。如果您使用的是无连接协议,则 EndReceive 将读取传入网络缓冲区中第一个排队的可用数据报。如果您使用的是面向连接的协议,则 EndReceive 方法将读取所有可用的数据,直到达到 BeginReceive 方法的 size 参数所指定的字节数为止。如果远程主机使用 Shutdown 方法关闭了 Socket 连接,并且所有可用数据均已收到,则 EndReceive 方法将立即完成并返回零字节。
请问大家我该怎么办? 是否因为是无连接协议,所以每次只返回第一个排队的可用数据报???那么为什么Windows的TelNet工具可以正常控制目标系统可以正确返回?