3
回答
UDT使用DGRAM如何通信
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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.

UDT
举报
Mali_Ang
发帖于3年前 3回/1K+阅
共有3个答案 最后回答: 3年前

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

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

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

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

顶部