UDT使用DGRAM如何通信

Mali_Ang 发布于 2014/07/30 10:58
阅读 1K+
收藏 0
UDT

UDT使用DGRAM模式通信时,需要对两端都调用connect函数。假设我有一个C/S模式,服务器等待客户端的数据,那么,这时服务器怎么connect到每一个客户端呢?服务器事先并不知道客户端的地址啊!connect都不成功,那么后续的通信就更别提了。

把UDT手册全看过了,网上也查过相关的代码,唯一一个使用UDT DGRAM通信的是定义了一个UDP socket和UDT socket,将两个socket bind在一起。但是,这段代码还是手动输入了对端(客户端)的地址。

那么,使用DGRAM模式,服务器如何获取地址,怎么样connect呢?使用UDT DGRAM究竟如何编程呢?求一段代码作为示例。

下面是connect函数的说明。

connect

The connect method connects to a server socket (in regular mode) or a peer socket (in rendezvous mode) to set up a UDT connection.

int connect(
  UDTSOCKET  u,
  const struct sockaddr*  name,
  int*  namelen
);
Description

UDT is connection oriented, for both of its SOCK_STREAM and SOCK_DGRAM mode. connect must be called in order to set up a UDT connection. The nameparameter is the address of the server or the peer side. In regular (default) client/server mode, the server side must has called bind and listen. In rendezvous mode, both sides must call bind and connect to each other at (approximately) the same time.

加载中
0
岳阳小罗
岳阳小罗

不知道,
但是我看你的场景,应该使用广播或者组播。

M
Mali_Ang
我是自己写了个UDP的聊天软件,使用C/S模式,服务器作中间转发。后来的时候想实现UDP无差错传输,然后就发现了UDT,因此,才来研究它的,结果,不会用.......暂时没有想拓展到多播和组播
0
A
Algol_68
我最近用到udt,如果你用UDT_STREAM那使用上跟用TCP没什么区别,这也是作者想一直做的 在UDP的基础上建立一个可靠的应用层传输控制,他内部实现了类似TCP握手的操作, 但针对UDT_DGRAM 这个我看到的部分跟你看到的一致,暂时没找到解决办法,个人感觉如果本身就想用UDP,不管其可靠性,这个UDT真不如UDP的传统代码
0
M
Mali_Ang

我后来对UDT_DGRAM的理解是:作者基于UDP实现了DGRAM,但是DGRAM模式的API是仿照TCP的,也就是说,虽然定义为DGRAM,但是使用的时候跟TCP的方法一样,connect,accept之类的函数都不能少,只是收发消息的时候是要用sendmsg,recvmsg(是否一定要使用这两个函数不确定)。

我的感觉是这样,但是,如果是这样的话,STREAM和DGRAM用起来就没有什么区别了,或许它们的区别在内部实现吧。。。。

返回顶部
顶部