相关疑难解决方法(0)

什么时候使用UDP而不是TCP?

由于TCP保证了数据包传输,因此可以被认为是"可靠的",而UDP不保证任何东西,数据包可能会丢失.在应用程序中而不是在TCP流上使用UDP传输数据有什么好处?在什么样的情况下,UDP是更好的选择,为什么?

我假设UDP更快,因为它没有创建和维护流的开销,但如果某些数据永远不会到达目的地那么这不是无关紧要的吗?

networking udp tcp

286
推荐指数
12
解决办法
20万
查看次数

什么会导致UDP数据包被发送到localhost时被丢弃?

我正在发送非常大(64000字节)的数据报.我意识到MTU远小于64000字节(典型值大约是1500字节,来自我的阅读),但我怀疑会发生两件事之一 - 要么没有数据报就能通过(所有大于1500字节)会被静默删除或导致抛出错误/异常)或64000字节数据报将被分成大约43个1500字节的消息并透明地传输.

从长远来看(2000 + 64000字节数据报),数据报的大约1%(即使是LAN似乎异常高)也会被丢弃.我可能期望通过网络,数据报可能无序到达,被丢弃,过滤等等.但是,在localhost上运行时我没想到这一点.

是什么导致无法在本地发送/接收数据?我意识到UDP是不可靠的,但我没想到它在localhost上如此不可靠.我想知道它是否只是一个时间问题,因为发送和接收组件都在同一台机器上.

为了完整起见,我已经包含了发送/接收数据报的代码.

发送:

DatagramSocket socket = new DatagramSocket(senderPort);

int valueToSend = 0;

while (valueToSend < valuesToSend || valuesToSend == -1) {
    byte[] intBytes = intToBytes(valueToSend);

    byte[] buffer = new byte[bufferSize - 4];

     //this makes sure that the data is put into an array of the size we want to send
    byte[] bytesToSend = concatAll(intBytes, buffer);

    System.out.println("Sending " + valueToSend + " as " + bytesToSend.length + " bytes");

    DatagramPacket packet = new DatagramPacket(bytesToSend,
                        bufferSize, …
Run Code Online (Sandbox Code Playgroud)

java udp network-programming

21
推荐指数
1
解决办法
3万
查看次数

通过网络传输文件的最快方法是什么(FTP,HTTP,RSync等)

我试图找出在两个系统之间通过网络传输大量数据的最佳方法.我目前正在研究FTP,HTTP或RSync,我想知道哪一个是最快的.我在网上找了一些答案,发现了以下网站:

问题是这些都是旧的,并且更多地谈论协议如何通信之间的理论差异.我对实际的基准测试更感兴趣,可以说对于特定的设置,当传输不同大小的文件时,一个协议比其他协议快x%.

有没有人测试这些并将结果发布到某个地方?

ftp networking rsync file-upload http

21
推荐指数
3
解决办法
8万
查看次数

如何在Linux中禁用Nagle的算法?

有办法通过命令行吗?man tcp告诉我,我需要设置tcp_nodelay = 1,但我无法在/ proc/sys/net/ipv4下创建tcp_nodelay文件.如果有任何方法可以在Linux中禁用Nagle,请告诉我.

linux nagle

10
推荐指数
1
解决办法
4万
查看次数

UdpClient与TcpClient

UdpClient和TcpClient有什么区别?什么时候我应该使用Tcp和Udp从软件arhitecture点?我希望我解释得对..

.net c#

7
推荐指数
2
解决办法
7126
查看次数

TCP与UDP套接字延迟基准

我已经为Python中通过TCP和UDP进行套接字通信实现了一个小型基准。令人惊讶的是,TCP几乎是UDP的两倍。

为避免路由影响,服务器和客户端在同一台Unix计算机上运行,​​但在不同的线程上运行。

也许代码很有用。这是服务器代码:

import socket
import sys

host = 'localhost'  
port = 8888
buffersize = 8
server_address = (host, port) 

def start_UDP_server():
    socket_UDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    socket_UDP.bind(server_address)

    print("UDP server is running...")

    while True:
        data, from_address = socket_UDP.recvfrom(buffersize)
        if not data: break
        socket_UDP.sendto(data, from_address)
    socket_UDP.close()


def start_TCP_server():
    socket_TCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket_TCP.bind(server_address)
    socket_TCP.listen(1)

    print("TCP server is running...")

    while True:    
        client, client_address = socket_TCP.accept()

        while True:
            data = client.recv(buffersize)
            if not data: break
            client.sendall(data)

        client.close()
Run Code Online (Sandbox Code Playgroud)

因此,您可以运行start_TCP_server()start_UDP_server()

在客户端,代码是:

import …
Run Code Online (Sandbox Code Playgroud)

python sockets udp tcp

6
推荐指数
1
解决办法
3423
查看次数

哪种是按顺序发送大型UDP数据包的最佳方法

我有一个Android应用程序,需要每100毫秒通过协议UDP发送数据.每个UDP数据包平均有15000字节.数据包以广播形式发送

下面每100毫秒行都会循环一次.

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, broadcast, 9876); 
clientSocket.send(sendPacket);
Run Code Online (Sandbox Code Playgroud)

应用程序开始正常工作,但在大约1分钟后,接收到的数据包的频率会降低,直到数据包没有到达目的地.

UDP数据包的最大大小的理论限制(在Windows上)为65507字节

我知道网络的媒体MTU是1500字节,当我发送一个更大的数据包时,它被分成几个片段,如果一个片段没有到达目的地,整个包就会丢失.

我不明白为什么在最初的1分钟内数据包被正确发送,一段时间后数据包不再到达.所以我想知道解决这个问题的最佳方法是什么?

java sockets networking android udp

5
推荐指数
1
解决办法
1万
查看次数

为什么游戏开发人员在应用程序级别中避免使用TCP并使UDP可靠?

许多游戏开发者选择在应用程序级别使UDP 可靠.这不是TCP的用途吗?我创建了一个API,使用UDP和TCP数据包启用客户端 - 服务器通信.我应该在列表中添加Reliable UDP吗?为什么?如果我使用TCP有问题吗?

我只是想知道RUDP是否对TCP有任何好处,因此我可以选择是否添加RUDP支持.

networking udp tcp rudp

5
推荐指数
2
解决办法
2871
查看次数

我应该使用TCP还是UDP?

我的应用程序需要从服务器到客户端逐帧发送视频数据.我在使用TCP或UDP之间摇摆不定.

从我的测试中,我发现了一些以下结果:

TCP:非常容易实现.

UDP:要向客户端发送一个帧(大约50KB),如果我为每个帧创建1个UDP包,则发送总是丢失帧.所以我必须将每个帧分成许多UDP包.这使得我的算法非常复杂,因为UDP协议可能会丢失包,并且包可能无序传递.另外,如果每个UDP包中的数据长度很大,那么很容易丢失.

我有以下几个问题:

  1. 我应该在这种类型的应用程序中使用TCP或UDP.

  2. 如果我想使用UDP来实现更快的传输,那么如何确定每个包中的数据长度在传输时不会轻易丢失?(这可能属于网络带宽?).

  3. 根据您的经验,您能估算出TCP更快的UDP有多少百分比?

很抱歉在帖子中有很多问题,但在我的应用程序中决定使用TCP或UDP之前我需要了解更多细节,这对我来说非常重要.

很多人,

T&T组

udp tcp

2
推荐指数
1
解决办法
3725
查看次数

标签 统计

udp ×6

networking ×4

tcp ×4

java ×2

sockets ×2

.net ×1

android ×1

c# ×1

file-upload ×1

ftp ×1

http ×1

linux ×1

nagle ×1

network-programming ×1

python ×1

rsync ×1

rudp ×1