草庐IT

socket通信

全部标签

sockets - TCP拥塞会影响其他端口吗?

我听说当TCP数据包丢失时,一切都会因为拥塞而卡住,直到最终收到丢失的数据包。例如服务器在同一端口上发送这些数据包:1(UDP),2(UDP),3(TCP),4(UDP),5(UDP),6(UDP)所以如果数据包3丢失,客户端将无法接收数据包4、5、6,直到数据包3被接收,对吗?如果应用程序使用两个端口,一个用于TCP,另一个用于UDP,TCP拥塞是否会影响UDP端口性能?我的意思是UDP数据包会卡住吗? 最佳答案 TCP拥塞应该只会影响当前连接(套接字)。简而言之,对于每个连接,都有一个TCP滑动窗口,用于组装数据包。如果一个数据

java - 是否可以在全双工 TCP 通信中使用 Netty?

Netty似乎只能通过单个TCP连接处理读取或写入操作,但不能同时处理这两种操作。我有一个连接到用Netty编写的回显服务器应用程序并发送大约200k消息的客户端。echo服务器简单地接受客户端连接并发回客户端发送的任何消息。问题是我无法让Netty在全双工模式下使用TCP连接。我想在服务器端同时处理读写操作。在我的例子中,Netty从客户端读取所有消息,然后将它们发回,这导致了高延迟。客户端应用程序为每个连接触发两个线程。一个用于任何写操作,另一个用于读操作。是的,客户端是以普通的旧JavaIO风格编写的。也许问题与我在服务器端设置的TCP选项有关:.childOption(Chan

Java/安卓 : Socket closed when offloading work to a thread pool

我在Android上编写线程池TCP服务器时遇到了一个非常令人费解的错误。基本上,我的代码结构如下:标准服务器循环(在其自身线程内的循环中阻止调用socket.accept()),在传入连接时调用处理程序:socket=mServerSocket.accept();myHandler.onIncomingConnection(socket);处理程序将传入连接的所有进一步处理卸载到线程池:publicclassX{privatefinalExecutorServicereceiveThreadPool=Executors.newSingleThreadExecutor();[...]p

sockets - 套接字编程,如果我写的数据超过一个 TCP/UDP 数据包会发生什么?

我有一个关于套接字编程的问题。当我使用套接字发送数据时,我们可以使用sendto()等API来使用TCP或UDP发送。对于sendto(),我们给出一个数组指针和我们要发送的字节数。在这种情况下,如果我给出一个大字节数(例如:20000字节),根据我的理解,网络的MTU不会那么大,所以套接字实际上发送多个数据包而不是一个大数据包。既然这20000字节被拆分成了几个UDP/TCP数据包,那么一开始这20000字节会不会被看成一个数据包呢?这个过程是UDP/TCP碎片吗?我的另一个问题是,如果我将小于MTU的数据放入sendto(),那么我可以保证调用一次sendto(),socket只发

sockets - TCP_FASTOPEN 未声明

我正在编写一个使用TCPFastOpen的小型服务器通过setsockopt()选项。但是我从gcc得到这个错误:$gccserver.cserver.c:Infunction'main':server.c:35:34:error:'TCP_FASTOPEN'undeclared(firstuseinthisfunction)if(setsockopt(sock,IPPROTO_TCP,TCP_FASTOPEN,&qlen,sizeof(qlen)==-1)这是服务器的代码:#include#include#include#include#include#include#include

sockets - netcat 如何从两个不同的终端监听同一主机上的同一端口?

为什么当我从两个不同的终端执行以下命令时(在我的Debian8.4机器上)没有输出“地址已在使用”类型的错误?netcat-p1234-l我想知道为什么它不抛出错误,因为它启动了两个监听同一端口的进程。netcat不使用套接字吗?怎么可能? 最佳答案 在我的系统上,运行stracenc-l1234结束时:socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)=3setsockopt(3,SOL_SOCKET,SO_REUSEADDR,[1],4)=0setsockopt(3,SOL_SOCKET,SO_REU

c++ - boost::asio::ip::tcp::socket 不读取任何内容

这实际上是我在套接字编程方面的第一个程序,而不是复制粘贴教程代码并从中获得乐趣。无论如何它不起作用。我想我已经仔细阅读了文档,但也许还不够。我怀疑我在read_message()中使用了socket::read_some(),因为我有问题的程序在读取部分停止了。我认为我使用它的方式应该没问题,因为socket::read_some()的文档指出“函数调用将阻塞,直到一个或多个字节的数据被成功读取,或者直到一个发生错误。”下面是我的代码。任何帮助表示赞赏。voidread_message(std::string&message,boost::asio::ip::tcp::socket&s

Django TCP套接字通信

我是TCP套接字编程的新手。我有一个与微Controller通信的基于django的服务器。现在,我想在服务器端实现基于TCP的套接字,以便与微Controller上的TCP套接字进行通信。谁能告诉我如何做到这一点?我应该在我的django服务器上使用什么库微处理器基本上每5秒打开一次套接字并向服务器发送一个通知。服务器端的我应该能够读取它并使用微处理器打开的这个套接字将数据泵回微处理器。 最佳答案 如果您已经熟悉django,并且您的微Controller支持发送HTTP(REST)请求并且可以解析Json,您只需添加一个返回js

python - python socket.sendall 成功返回是什么意思?

在我的代码中我写了这样的东西:try:s.sendall(data)exceptExceptionase:printe现在,我可以假设如果sendall没有抛出任何异常,套接字的另一端(它的内核)确实收到了“数据”吗?如果不是,那意味着我需要发送一个对我来说似乎不合理的应用程序确认。如果我可以假设另一方的内核确实收到了“数据”,那么这意味着“sendall”仅在它看到我放入“数据”的所有字节的tcpack时返回,但我看不到任何文档为此,相反,通过搜索网络,我觉得我不能假设收到了ack。 最佳答案 canIassumethatifth

sockets - SO_KEEPALIVE 使哪个连接端发送 keepalive 探测?

如果使用setsockopt将套接字设置为SO_KEEPALIVE,是否意味着调用setsockopt的一方将发送keepalive探测?因此,如果一方执行以下步骤,它将发送保活探测:使用socket创建套接字使用setsockopt设置SO_KEEPALIVE调用连接开始数据传输如果另一方执行了以下步骤,它也会发送保活探测:使用accept创建套接字使用setsockopt设置SO_KEEPALIVE开始数据传输我在谷歌上搜索并浏览了TCPKeepaliveHOWTO.但我找不到明确的答案。 最佳答案 Keep-alive是从应用