相关疑难解决方法(0)

两个应用程序可以侦听同一个端口吗?

同一台机器上的两个应用程序可以绑定到同一个端口和IP地址吗?更进一步,一个应用程序可以收听来自某个IP和另一个远程IP的请求吗?我知道我可以有一个应用程序从两个线程(或叉子)开始有类似的行为,但两个没有任何共同点的应用程序可以做同样的事情吗?

sockets port udp tcp communication

262
推荐指数
7
解决办法
26万
查看次数

socket.error:[Errno 48]地址已被使用

我正在尝试从mac终端设置一个带python的服务器.

我导航到文件夹位置使用:

python -m SimpleHTTPServer
Run Code Online (Sandbox Code Playgroud)

但这给了我错误:

socket.error: [Errno 48] Address already in use
Run Code Online (Sandbox Code Playgroud)

我以前使用相同的命令为我机器中不同位置的不同网站打开连接.

python macos simplehttpserver

196
推荐指数
10
解决办法
31万
查看次数

设置TIME_WAIT TCP

我们正在尝试调整通过TCP接受消息的应用程序,并使用TCP进行一些内部消息传递.在进行负载测试时,我们注意到响应时间显着降低(然后完全停止),因为对系统进行了更多的同时请求.在此期间,我们看到很多TCP连接处于TIME_WAIT状态,有人建议将TIME_WAIT环境变量从默认的60秒降低到30.

我所知,该TIME_WAIT设置实质上设置了在关闭连接后TCP资源再次可用于系统的时间.

我不是一个"网络人",对这些事情知之甚少.我需要很多联系帖子中的内容,但是"笨拙"了一下.

  • 我想我明白为什么这个TIME_WAIT值不能设置为0,但可以安全地设置为5吗?10岁呢?什么决定了这个值的"安全"设置?
  • 为什么这个值的默认值为60?我猜想比我聪明的人有充分的理由选择这个作为合理的默认值.
  • 关于压倒这个价值的潜在风险和好处,我还应该知道什么呢?

tcp network-protocols

66
推荐指数
3
解决办法
11万
查看次数

SO_REUSEADDR(setsockopt选项)是什么意思 - Linux?

从手册页:

SO_REUSEADDR指定在验证提供给bind()的地址时使用的规则应该允许重用本地地址(如果协议支持的话).此选项采用int值.这是一个布尔选项

我应该什么时候使用它?为什么"重用本地地址"给出了?

sockets linux port ip-address setsockopt

57
推荐指数
3
解决办法
6万
查看次数

让两个UDP服务器监听同一个端口?

我有一个客户端通过UDP广播发送数据.(比如说127.0.0.255:12345)

现在我想让多个服务器监听这些数据.要在本地计算机上执行此操作,他们需要共享端口12345以进行侦听.

我的问题是,如果可能,如果有任何不利之处,并且这种方法可能存在问题.

不幸的是,有一种替代方案会带来很多开销:
实现某种注册过程.在启动时,每个服务器都告诉客户端它的端口.客户端然后将消息发送到每个端口(必须多次发送数据,需要实现某种握手......)
你知道更好的替代方案吗?

如果重要:
我正在使用C++和Boost :: Asio.该软件应该是可移植的(主要是Linux和Windows).

networking udp network-programming

15
推荐指数
2
解决办法
3万
查看次数

NAT跟踪如何在像bittorrent这样的对等协议的情况下工作.

我知道NAT遍历和STUN,TURN和ICE及其使用.我想知道这些是否在像bittorrent这样的点对点文件共享应用程序中实现.跟踪器是否通过帮助使用STUN创建直接连接或通过TURN中继来促进NAT之后的对等体彼此通信.在分布式哈希表(DHT)的情况下,一个对等体如何与NAT后面的其他对等体通信?

p2p bittorrent dht nat stun

15
推荐指数
1
解决办法
4474
查看次数

多个应用程序如何在同一端口(80)上侦听?

与使用端口80有关的许多问题都有答案说有许多程序将它用作默认端口.这篇文章提到了一些:Skype,IIS,Apache ......

由于一次只能有一个应用程序可以侦听任何一个端口 - 这怎么可能?如果答案是那只是他们的默认端口 - 应用程序如何知道它必须将信息发送到不同的端口?例如 - 如果iis将在端口81上收听,因为Skype正在监听80 - 请求网页的任何人都知道如何将请求发送到theip:81而不是theip:80

我的目标是在任何硬编码端口由于某些应用程序已经在其上监听而导致失败时,有一种在程序之间建立连接的强大方法.端口只需要使用一次,以便传达将在会话的其余部分使用的动态端口.这对于网络连接和在同一台计算机上连接多个应用程序都是一个问题.

注册IANA并非总是可行,甚至不一定能解决问题 - 有人可能仍在监听注册端口.显然,"没有碰撞的希望"的解决方案 - 只是没有削减它.

(我知道连接有两个套接字(和一个协议),因此一个套接字可以有多个连接.我的问题是关于监听套接字以建立连接.)

我期望的是,在操作系统(Windows)上存在一些我可以注册我的应用程序的服务,并接收带有一些签名的所有传入流量 - 即使它只是一些魔术字符串.或者也许是一些多个应用程序可以同时监听的端口- 并且所有端口都会收到每个传入的消息 但到目前为止我还没有找到类似的东西.

.net c# sockets udp tcp

12
推荐指数
1
解决办法
9171
查看次数

我们应该使用多个接受器套接字来接受大量连接吗?

众所周知,SO_REUSEPORT允许多个套接字侦听相同的IP地址和端口组合,它将每秒请求增加2到3倍,并减少延迟(~30%)和延迟标准差(8次):https ://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/

NGINX版本1.9.1引入了一项新功能,该功能支持使用 SO_REUSEPORT套接字选项,该选项适用于许多操作系统的较新版本,包括DragonFly BSD和Linux(内核版本3.9及更高版本).此套接字选项允许多个套接字侦听相同的IP地址和端口组合.然后内核负载平衡套接字上的传入连接....

如图所示,reuseport将每秒请求数增加了2到3倍,并减少了延迟延迟的标准偏差.

在此输入图像描述

在此输入图像描述

在此输入图像描述


SO_REUSEPORT适用于大多数现代操作系统:Linux(自2013年4月29日起内核> = 3.9),Free/Open/NetBSD,MacOS,iOS/watchOS/tvOS,IBM AIX 7.2,Oracle Solaris 11.1,Windows(仅表现为2个标志)在BSD上一起+ ,可能在Android上:https: //stackoverflow.com/a/14388707/1558037SO_REUSEPORTSO_REUSEPORTSO_REUSEADDR

Linux> = 3.9

  1. 此外,内核为SO_REUSEPORT其他操作系统中找不到的套接字执行一些"特殊魔法" :对于UDP套接字,它尝试均匀分布数据报,对于TCP侦听套接字,它会尝试分发传入的连接请求 (通过调用接受的请求accept())均匀地跨越共享相同地址和端口组合的所有套接字.因此,应用程序可以轻松地在多个子进程中打开相同的端口,然后使用它 SO_REUSEPORT来获得非常便宜的负载平衡.

同样众所周知,为了避免自旋锁定和高性能锁定,不应该有超过1个线程的套接字.即每个线程都应该处理自己的套接字以进行读/写.

POSIX.1-2001/SUSv3 需要accept(),bind(),connect(),listen(),socket(),send(),recv()等作为线程安全函数.标准中可能存在关于它们与线程交互的一些含糊之处,但其意图是它们在多线程程序中的行为受标准控制.

  • 如果我们在许多线程中使用相同的一个套接字,那么性能将会很低,因为套接字通过锁进行防御,以便从多个线程进行线程安全访问:https: …

c sockets linux multithreading tcp

12
推荐指数
1
解决办法
1775
查看次数

可以在同一台计算机上的多个应用程序接收UDP广播吗?

例如,假设我有一个"智能"温度计,每隔N秒将当前温度广播为UDP数据报.

现在,我可以编写一个侦听这些消息并以图形方式显示它们的客户端,并且我可以让该客户端同时在多台计算机上运行.到目前为止没问题.

但是,当我尝试在同一台Windows计算机上运行客户端的两个实例时,我会遇到有关尝试" 绑定到已使用的端口 "的错误.

这是:-

  • 答:就像所有操作系统上的UDP广播一样?
  • B:Windows网络堆栈的限制?
  • C:或者,可能是我正在阅读数据报的方式中的一个错误?

如果A或B,有什么办法围绕它.

如果是C,那么我会发布一些代码..

networking udp tcp broadcast

11
推荐指数
1
解决办法
5628
查看次数

多个进程在同一个端口上侦听?

我试图了解如何在Windows XP上启动多个进程侦听相同的TCP {IP,Port}对.

例如,我可以启动两个ncat.exe程序监听端口371.第二个程序启动没有任何问题,并接收传入连接,而第一个没有.一旦最后开始的过程终止,第一个接收它们.

netstat -a -n | find "LISTENING"
   TCP    0.0.0.0:371            0.0.0.0:0              LISTENING
   TCP    0.0.0.0:371            0.0.0.0:0              LISTENING
Run Code Online (Sandbox Code Playgroud)

假设这是一种Windows(XP)行为,它如何成为一种安全可靠的行为?这意味着可以"重载"任何已经侦听的端口,而不是获取通常的"已使用的地址"错误消息,并简单地绕过防火墙,规则只是说"允许端口371上的任何传入TCP连接".

sockets windows networking tcp

11
推荐指数
1
解决办法
7462
查看次数