我想知道为什么在RTP而不是TCP中使用UDP?主要的VoIP工具只使用UDP,因为我攻击了一些VoIP OSS.
我试图在UDP套接字上设置100ms超时.我正在使用C.我在下面发布了我的代码的相关部分.我不确定为什么这不是超时,但只是在它没有收到段时挂起.这仅适用于未使用bind()方法绑定的套接字吗?
#define TIMEOUT_MS      100     /* Seconds between retransmits */
if ((rcv_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
    DieWithError("socket() failed");
if ((rcv_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
    DieWithError("socket() failed");
//set timer for recv_socket
static int timeout = TIMEOUT_MS;
setsockopt(rcv_sock, SOL_SOCKET, SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));
if(recvfrom(rcv_sock, ackBuffer,sizeof(ackBuffer), 0,
       (struct sockaddr *) &servAddr2, &fromSize) < 0){
    //timeout reached
    printf("Timout reached. Resending segment %d\n", seq_num);
    num_timeouts++;
}
Run Code Online (Sandbox Code Playgroud) 对于Internet协议(IP),我可以使用多播:
另外,在示例中,对于UDP,我可以使用:
但是我可以将这些内容用于TCP吗?
我有一个奇怪的想法.我听说过我的理解使用UDP传输文件的软件,减少了TCP数据包中的开销.
如果我的应用需要TCP,我的局域网有软件设置,可以通过软件设置与海岸另一侧的另一个数据中心进行通信.是否可以通过UDP发送实际数据,而不是在两端模拟TCP?
我依旧记得有关7层的内容,但我不确定协议是否是其中一个层,我不确定在网络上使用UDP时TCP是否无法模拟/实现完美.有没有人对这些项目有任何想法或信息?
TCP是面向流的,意味着数据作为连续的字节流传输.但令我困惑的是TCP创建了段并将其传递给IP.IP创建数据包封装段并传输它们.那么这里的连续流究竟在哪里呢?
另一方面,UDP是面向消息的.它从应用层接收消息,创建数据报并将其推送到IP.到目前为止,它与TCP相同,而是创建和推送数据报.是什么让这个协议面向消息?
在Linux中,可以使用以下命令为网络数据包(例如UDP)指定系统的默认接收缓冲区大小:
sysctl -w net.core.rmem_max=<value>
sysctl -w net.core.rmem_default=<value>
Run Code Online (Sandbox Code Playgroud)
但我想知道,应用程序(例如,in c)是否可以通过在运行时指定每个UDP套接字的接收缓冲区大小来覆盖系统的默认值?
我有一个UDP套接字绑定到INADDR_ANY来监听我的服务器上的所有IP数据包.我通过同一个套接字发送回复.
现在,当发送数据包时,服务器会自动选择将哪个IP用作源IP,但我希望能够自己设置传出源IP.
有没有办法做到这一点,而无需为每个IP创建一个单独的套接字?
我正在尝试将UDP多播数据包发送到:230.185.192.108,以便所有订阅者都会收到.有点卡住了.我相信它正确播放,但似乎无法与任何客户端进行任何选择.
服务器:
var news = [
   "Borussia Dortmund wins German championship",
   "Tornado warning for the Bay Area",
   "More rain for the weekend",
   "Android tablets take over the world",
   "iPad2 sold out",
   "Nation's rappers down to last two samples"
];
var dgram = require('dgram'); 
var server = dgram.createSocket("udp4"); 
server.bind();
server.setBroadcast(true)
server.setMulticastTTL(128);
server.addMembership('230.185.192.108'); 
setInterval(broadcastNew, 3000);
function broadcastNew() {
    var message = new Buffer(news[Math.floor(Math.random()*news.length)]);
    server.send(message, 0, message.length, 8088, "230.185.192.108");
    console.log("Sent " + message + " to the wire...");
    //server.close();
}
Run Code Online (Sandbox Code Playgroud)
客户
var PORT …Run Code Online (Sandbox Code Playgroud)