主题:有关UDP连接的一个问题 共有42547人关注过本帖 |
---|
edwint |
1楼 |
有关UDP连接的一个问题 Post By:2004-7-8 10:43:00 [只看该作者]
我们在进行UDP测试的时候发现,如果服务器端程序被中止了后,模块发送数据的函数int ConnWrite( int conno, char* buff, int len),会返回一个小于0的数。从这个现象就可以判断,此函数可以判断数据是否送到目的端。但是,一般情况而言,以UDP方式发送数据时,是没有返回值的,只管发就完了,到底有没有送达目的端,发方是不知道的。你们这个函数又是如何检测到的呢?
|
|
单帖管理 | 引用 | 回复 |
zhl |
2楼 |
Post By:2004-7-8 13:06:00 [只看该作者]
以前在以太网上进行UDP的测试时,由于需要通过ARP获取对方的MAC地址,所以要求udp的包同样需要有服务器程序运行,在PPP的情况下,应该没有这个问题,请问你是在以太网上作的测试吗?
|
|
单帖管理 | 引用 | 回复 |
edwint |
3楼 |
Post By:2004-7-8 14:48:00 [只看该作者]
我是在PPP情况下进行测试的。具体情况是这样的:我通过一台计算机上了Internet网,并在此计算机上运行了一个UDP的服务器程序,另外一端用的是ETR186模块,通过GPRS网络连接到计算机上,这样通讯就一切正常了。这时,我把计算机上的服务程序关闭,并且在ETR186模块中继续调用connwrite函数向服务器端发数据,这时就返回了一个小于0的数。按道理说,服务器是否断开ETR186模块是不知道的,这时connwrite函数返回的应该是我发送的字符串的长度,而不应该是一个小于0的数的,这一点我就不是很明白了。但是这样却是很有用的,因为由此我可以判断服务器端是否已经断开了连接,这就为我在下面的操作中是否需要重新连接提供了依据。我现在想知道的是,connwrite函数真的是在UDP方式下还有这种功能嘛?如果有又是如何实现的呢?
|
|
单帖管理 | 引用 | 回复 |
zhl |
4楼 |
Post By:2004-7-8 16:53:00 [只看该作者]
我们作了测试,服务器端不运行接收,在PPP下,UDP照样可以发送,connwrite函数返回值为发送字符串的长度。请问你返回的错误代码为多少?
|
|
单帖管理 | 引用 | 回复 |
edwint |
5楼 |
Post By:2004-7-8 17:37:00 [只看该作者]
我们发送的数据是“1”,返回的错误代码是-14
|
|
单帖管理 | 引用 | 回复 |
zhl |
6楼 |
Post By:2004-7-9 9:17:00 [只看该作者]
-14是协议错误。建议你在程序中将connwrite的返回值用printf打印出来,然后直接运行程序,以检测connwrite的返回值是否正常。
|
|
单帖管理 | 引用 | 回复 |
edwint |
7楼 |
Post By:2004-7-9 9:42:00 [只看该作者]
我是这样做的。但是,只要服务器端接受程序断开,打印出的错误代码就是-14。Conn = ConnOpen( IPStr, "UDP/IP", MP, Port, NONBLOCKOPEN ),是用这个函数建立UDP连接吗?这个连接号CONN是怎么产生的,起到的是什么作用呢?
|
|
单帖管理 | 引用 | 回复 |
zhl |
8楼 |
Post By:2004-7-9 13:00:00 [只看该作者]
这个连接号是一个序号,有了这个序号便于对于连接所占的资源进行管理。相当于一个数组中的序号,只不过数组是一个大的结构而已。
|
|
单帖管理 | 引用 | 回复 |