Tag: 套接字

获取本地计算机的IP地址

在C ++中,获取本地计算机的IP地址和子网掩码的最简单方法是什么? 我希望能够在本地networking中检测本地计算机的IP地址。 在我的情况下,我有一个networking,其子网掩码为255.255.255.0,我的电脑的IP地址是192.168.0.5。 我需要得到这些有两个值编程为了发送一个广播消息到我的networking(forms192.168.0.255,对于我的具体情况) 编辑:许多答案没有给我预期的结果,因为我有两个不同的networkingIP。 Torial的代码做了窍门(它给了我两个IP地址)。 谢谢。 编辑2:感谢Brian R. Bondy关于子网掩码的信息。

使用Socket.IO + Node.js + ZMQ发送消息时发生内存泄漏

我有三个应用程序互相交谈。 Websocket服务器(1)接受来自浏览器的连接,parsingurl以查看需要什么数据,如果它有内存中的数据则将其提供给客户端,如果不从另一个名为“fetcher”的应用程序请求它(2)。 Fetcher接收到这个作业,从一个简单的API(3)请求它返回JSON数据,并将其发送回websocker服务器,并将其发布到连接的客户端。 然后“Fetcher”开始定期检查是否有更新到该URL /作业,并发送新的数据到websocket服务器。 我使用socket.io进行client-websocket服务器通信。 Websocket服务器和fetcher通过ZMQ套接字进行通信 。 我用130个连接加载testingwebsocket服务器。 Websocket服务器每秒向130个客户端发布160KB的数据。 一开始,它为130个连接使用了170MB的内存,但是很快就增加到了1GB,尽pipe没有新的连接。 然后socket.io的心跳信号开始失败,导致连接丢失。 我使用Nodetime来获取堆快照。 在第130个客户端连接之后,下面是内存的外观: 共有44MB的 缓冲区对象 。 在四分钟内,Buffer对象的数量急剧增加(再次没有新的连接):其中有3012个,总内存为486MB 。 再过10分钟后,总共有3535个内存消耗总量为573MB 。 我用Mozilla的memwatch找出哪行增加了内存,发现是这个函数: function notifyObservers(resourceId) { var data = resourceData[resourceId]; io.sockets.in(resourceId).emit('data', data); } 如果我注释这些行,内存使用保持不变,这是另一个确认。 任何想法如何发生? 我在ZMQ的订阅者套接字方法里面调用了这个函数,我怀疑它和这个有关系。如果我删除了函数并将它们合并成一个, // Receive new resource data const resourceUpdatedSubscriber = zmq.socket('sub').connect('tcp://localhost:5433'); resourceUpdatedSubscriber.subscribe(''); resourceUpdatedSubscriber.on('message', function (data) { var resource = JSON.parse(data); resourceData[resource.id] = […]

如何支持IPv4和IPv6连接

我目前正在做一个UDP套接字应用程序,我需要build立支持,以便IPV4和IPV6连接可以发送数据包到服务器。 我希望有人能帮助我,指出我的方向是正确的。 我发现的大部分文档都不完整。 如果你能指出Winsock和BSD套接字之间的区别,那也是有帮助的。 提前致谢!

与Node.js长时间连接,如何减less内存使用并防止内存泄漏? 还与V8和webkit-devtools相关

下面是我正在做的事情:我正在开发一个Node.js http服务器,它将在一台机器上为成千上万的移动客户端推送目的(与redis协作)保持长时间连接。 testing环境: 1.80GHz*2 CPU/2GB RAM/Unbuntu12.04/Node.js 0.8.16 在第一次使用“快速”模块时,在使用交换之前,我可以达到约12万个并发连接,这意味着RAM不够。 然后,我切换到本地“http”模块,我得到的并发性高达160K。 但是我意识到在本地http模块中仍然有太多的function,所以我把它切换到本地“net”模块(这意味着我需要自己处理http协议,但没关系)。 现在,我可以达到每台机器大约25万个并发连接。 这是我的代码的主要结构: var net = require('net'); var redis = require('redis'); var pendingClients = {}; var redisClient = redis.createClient(26379, 'localhost'); redisClient.on('message', function (channel, message) { var client = pendingClients[channel]; if (client) { client.res.write(message); } }); var server = net.createServer(function (socket) { var buffer = ''; socket.setEncoding('utf-8'); […]

EAGAIN是什么意思?

在标题中,EAGAIN是什么意思?

如何检查一个套接字连接/断开在C#中?

如果一个networking套接字(System.Net.Sockets.Socket)如果另一个主机在断开连接时不发送数据包(例如,因为它非正常断开连接),如何检查networking套接字(System.Net.Sockets.Socket)是否仍然连接?

Java套接字是否支持全双工?

是否有可能有一个线程写入Java Socket的OutputStream ,而另一个线程从套接字的InputStream读取,而线程不必在套接字上同步?

消息队列在linux中是否过时?

我最近在Linux上一直在玩消息队列(System V,但是POSIX应该也可以),而且对于我的应用程序来说它们看起来非常完美,但是在阅读了Unix编程的艺术之后,我不确定它们是否真的是一个好select。 http://www.faqs.org/docs/artu/ch07s02.html#id2922148 System V IPC的高层消息传递层已经基本没有使用。 由共享内存和信号量组成的较低层在需要在同一机器上运行的进程之间进行互斥locking和一些全局数据共享的情况下仍然具有重要的应用。 这些System V共享内存设备演变成POSIX共享内存API,在Linux,BSD,MacOS X和Windows下支持,但不是经典的MacOS。 http://www.faqs.org/docs/artu/ch07s03.html#id2923376 System V IPC设施存在于Linux和其他现代Unix中。 但是,由于它们是遗留function,所以不经常使用。 到2003年中,Linux版本仍然存在漏洞。 似乎没有人愿意解决这些问题。 在更新的Linux版本中,System V消息队列仍然是错误的? 我不确定作者是否意味着POSIX消息队列应该正常? 似乎socket是几乎所有东西(?)的首选IPC,但我不明白用socket或其他方法实现消息队列将会如何简单。 还是我想太复杂? 我不知道是否与embedded式Linux相关?

如何避免NoRouteToHostException?

披露:我正在做的代码是大学课程作业。 背景:我试图完成的任务是报告不同线程技术的效果。 为此,我写了几个类,它们使用Java套接字响应来自客户端的请求。 这个想法是淹没服务器的请求,并报告不同的线程策略如何处理这个问题。 每个客户端将发出100个请求,并且在每次迭代中,我们将客户端的数量增加50个,直到发生中断。 问题:可重复,持续地发生exception: 引起:java.net.NoRouteToHostException:不能分配请求的地址 在java.net.PlainSocketImpl.socketConnect(本地方法) 在java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 在几种情况下会发生这种情况,包括当客户端和服务器都在本地主机上运行时。 连接可以成功一段时间,试图连接150个引发exception的客户端之后不久。 我首先想到的是,它可能是Linux对开放文件描述符(1024)的限制,但我不这么认为。 我还检查了套接字之间的任何和所有的连接是否正确closures(即在一个正确的finally块中)。 我不愿意发布代码,因为我不确定哪些部分是最相关的,也不希望在问题中有大量代码。 有没有人遇到过这个? 我怎样才能避免NoRouteToHostException? 编辑(进一步的问题是斜体) 到目前为止,一些很好的答案指向了Ephemeral Port Range或RFC 2780.两者都表明我有太多的连接打开。 对于这两个似乎需要达到这个限制的连接数表明,在某些时候我没有closures连接。 debugging了客户端和服务器之后,都观察到这个方法调用myJava-Net-SocketInstance.close() 。 这表明连接正在closures(至less在非例外情​​况下)。 这是一个正确的build议吗? 另外, 是否还需要一个OS级别的等待端口再次变得可用? 如果在运行下一次尝试之前只需要很短的时间(或乐观地运行一个命令),那么对于每个50+客户端来说,运行该程序将是一个单独的时间。 编辑v2.0 在提供了很好的答案后,我修改了我的代码,使用方法setReuseAddress(true)与客户端上build立的每个Socket连接。 这并没有达到预期的效果,我仍然限制在250-300个客户。 程序终止后,运行命令netstat -a显示在TIME_WAIT状态下有很多套接字连接。 我的假设是,如果套接字处于TIME-WAIT状态,并且已经使用SO-REUSEADDR选项设置,那么任何试图使用该端口的新套接字都将能够 – 但是,我仍然收到NoRouteToHostExceptionexception。 它是否正确? 还有什么可以解决这个问题呢?

如何删除CLOSE_WAIT套接字连接

我写了一个小程序,与特定端口上的服务器进行交互。 该程序工作正常,但: 一旦程序意外终止,并从该套接字连接显示在CLOSE_WAIT状态。 如果我尝试运行一个程序,它会挂起,我必须强制它closures,这会累积更多的 CLOSE_WAIT套接字连接。 有没有办法刷新这些连接?