草庐IT

c++ - C++ 中的简单多线程服务器?

我想编写一个简单的服务器应用程序,它将从客户端应用程序获取命令并在单独的线程中运行这些命令。我正在查看serverclassindlib.有没有人有使用这个的经验?它与使用Boost的Asio相比如何?ExampleofserverindlibExamplesofclient/serverinBoostAsio 最佳答案 BoostAsio可以很容易地做到这一点。看看theexamplesintheHighscoretutorial,它展示了如何使用Boost进行多线程异步输入/输出。#include#include#include

c++ - 原始套接字混杂模式不嗅探我写的东西

我正在以混杂模式编写一个带有原始套接字的程序,我需要原始套接字不嗅探我发送的数据包。我只需要通过以太网rx线(而不是tx线)读取数据。可能吗?非常感谢。 最佳答案 解决方案是查看读取的数据包是否为PACKET_OUTGOING。使用此选项,您可以区分放入以太网tx线的数据包和从rx线读取的数据包。以混杂模式打开Socket:char*i="eth0";intfd;structifreqifr;structsockaddr_llinterfaceAddr;structpacket_mreqmreq;if((fd=socket(PF_P

c++ - 如何处理生成它的对象内部的 SIGPIPE 错误?

我有两个应用程序,一个服务器和另一个客户端,都是用C++和Qt编写的,但它们都使用C库,该库使用C套接字方法在它们之间执行套接字通信(这一切都在Linux中)。当它们都已连接并且我关闭客户端时,当服务器尝试向其发送新消息时,它收到SIGPIPE错误并关闭。我在网络和SO中做了一些研究,看看如何为SIGPIPE创建一个处理程序,而不是关闭应用程序,我会告诉不断发送信息的计时器停止。现在我确实学会了如何简单地处理信号:创建一个接收int的方法并在main()或全局中使用signal(SIGPIPE,myMethod)(注意:从SO中了解到,是的,我知道signal()已过时)。但问题是,通

c++ - 我的 MFC 套接字代码中的 CAsyncSocket 断言问题和 "improper argument"错误背后的原因是什么?

我被要求为friend查看一些代码。(由于MFC和很多糟糕的代码,我犹豫是对的,但他赢了……)这是一个基于对话框的应用程序,使用了CAsyncSocket。问题表现为一些不间断的调试中断和其他类似的事情——MFCENSURE()宏也有问题——检查套接字是否为空。所有问题都发生在MFC的深处。一些谷歌搜索显示如果在Vista/XP中使用主题可能会发生资源泄漏,但我认为这不是这里的问题。根据我几个小时的调试,代码很差,但基本上它在做以下事情:(建立连接时没有问题-只有没有连接时才会出现这种情况)调用Connect(server,socket)(在派生的CAsyncSocket对象上)在On

c++ - 将 ip 解析为主机名

我正在尝试从IP地址解析主机名。我试过使用gethostbyaddr()和getnameinfo()但在很多情况下主机名根本没有解析。有没有更好的方法将IP地址转换为有效的主机名?char*ip=argv[1];//usinggethostbyaddr()hostent*phe=gethostbyaddr(ip,strlen(ip),AF_INET);if(phe){couth_name 最佳答案 Ihavetriedusinggethostbyaddr()andgetnameinfo()[...].Isthereabetterwa

c# - 将套接字服务器从 Node.js 移植到 C#

我在Node.js中为多用户人工智能应用程序构建了多个套接字服务器应用程序。我们希望每个盒子有1K到10K个事件套接字连接。然而,即使在闲置且有0个事件连接时,我的一些服务器在Unix上运行时也会消耗50-100MB的内存。我确信对于像C#或C++这样的合理平台,这应该接近0MB。所以我们正在考虑移植到“更好”的平台。现在让我澄清一下我的用例:这不是“网络服务器”。没有提供任何文件。我们进行了大量CPU密集型数据处理,某些部分已经移植到C++并通过native模块拉入Node。我们不需要访问太多的I/O(在大多数情况下访问几个文件,在某些情况下没有,我们也不使用RDBMS)我们选择了n

c++ - 同一端口套接字上的多个连接 C++

我需要接受到同一个端口的多个连接。我在C++中使用套接字,我想做一些像SSH那样的事情。我可以执行sshuser@machine"ls-lathrR/"并对同一台机器运行另一个命令,即使第一个命令仍在运行。我该怎么做?谢谢。 最佳答案 你想要的是一个多线程套接字服务器。为此,您需要一个主线程来打开一个套接字来监听(并等待传入​​的客户端连接)。这必须进入某种while循环。然后,当客户端连接到它时,accept()函数将解除阻塞,此时您需要通过将请求传递给将处理它的线程来处理客户端请求.服务器端将循环并等待另一个连接,同时前一个线程

C++ IP 地址人类可读形式

在C/C++中,您可以使用常规的gethostbyname()调用将点分IP地址字符串(在本地主机的情况下为“127.0.0.1”)转换为适合标准套接字调用的结构。现在如何将其翻译回来?我知道我可以做一些位移来准确地获得我想要的位集并将它们打印出来,但是有没有任何“标准”功能可以为我做这件事?它用于输出到日志文件中,以便我“真正”知道我正在连接谁/什么,因此人类可读的点分地址比原始十六进制好得多。谢谢。 最佳答案 首先,在新代码中,您通常应该更喜欢使用getaddrinfo()而不是gethostbyname(),后者既旧又笨重,很

c++ - 使用 boost::asio 的 AF_NETLINK (netlink) 套接字

我正在编写基于this的多播客户端/服务器应用程序和this;效果很好。但是,当计算机中事件网络接口(interface)的数量发生变化时,我还需要做一些事情,比如thispage的示例部分中的程序。我想我应该使用boost::asio::local中的工具,但我不确定我应该使用boost::asio::local::datagram_protocol还是boost::asio::local::stream_protocol或者...如何做尽可能相似的事情的例子会很有帮助。谢谢。 最佳答案 正如您所注意到的,必须编写一些额外的代码才

c++ - C/C++ 字节顺序和 tcp 套接字

我有一个关于字节序及其如何影响与C/C++的tcp套接字通信的一般概念性问题。这是一个例子:您有两台服务器与tcp套接字通信,一台使用大端,另一台使用小端。如果您通过套接字从一台服务器向另一台服务器发送一个整数,我知道字节顺序是相反的,整数将不会打印出预期的内容。正确的?我在某个地方看到(我再也找不到哪里了)如果你通过套接字字节顺序发送一个char不会改变值并且它会按预期打印。这个对吗?如果是这样,为什么?我觉得我以前做过这种事,但我可能是错觉了。谁能帮我解决这个问题?谢谢。编辑:是不是因为char只有1个字节? 最佳答案 考虑每种