Tag: 网络

如何在C ++中创建RAW TCP / IP数据包?

我是C ++程序员/网络管理员的开始,但我想如果有人指出我正确的方向,我可以学习如何做到这一点。 大多数教程都使用旧代码进行演示,这些代码由于某种原因不再有效。 因为我在Linux上,所以我需要的是如何编写原始Berkeley套接字的解释。 有人可以给我一个快速的运行吗?

将IP地址转换为整数

可能重复: 整数的IP地址 – C. 如何将IP地址转换为具有以下forms的整数:AB 。 或ABC *或A. 。*或。 。 。 我想编写一个C程序,可以确定IP地址是否是另一个的子集。 例如,IP地址192.168.125.5是192.168的子集。 。 。 现在我想将IP地址转换为唯一的整数,然后检查一个是否是另一个的子集。 有没有办法实现这个目标?

停止在recv上阻塞的接收器线程()

我有一个聊天应用程序,它有一个单独的线程来监听传入的消息。 while (main thread not calling for receiver to quit) { string message = tcpCon.tcpReceive(); // Relies on the recv() function processIncomingMessage(message); } 这种工作方式有一个大问题。 大多数情况下,循环将在recv()上阻塞,因此接收器线程不会退出。 在几秒钟后不强制线程终止的情况下解决此问题的正确方法是什么?

C socket:确实发送等待recv结束?

我在Windows上使用阻塞C套接字。 我使用它们将数据的更新从服务器发送到客户端,反之亦然。 我以高频率(每100毫秒)发送更新。 send()函数是否会等待收件人recv()在结束之前接收数据? 如果我理解man手册页,我会假设: “send()的成功完成并不能保证传递信息。” 那么,如果一个运行10个send()而另一个只有完整的1个recv()什么? 我是否需要使用某种确认系统?

在套接字编程中选择function

任何人都可以告诉我c中套接字编程中select函数的使用和应用吗?

在C程序中使用telnet

我正在研究一个机器人自动化项目,我遇到了一个障碍。 要控制机器人,需要通过telnet以无线方式连接它,并通过tcp / ip协议发送命令。 (例如,’Mabc’命令根据左轮速度(a),右轮速度(b)和时间(c)将其向前移动。 我想要做的是在C程序中进行一些计算,然后根据计算值向机器人发送消息。 如何在C程序中通过tcp / ip协议发送命令? 谢谢! 埃里克

如何忽略自己的广播udp数据包

对于以下我假设一张网卡。 我有一个程序的组件,旨在让子网中的其他人知道它的存在。 为此,我实现了一个解决方案,无论何时程序启动(以及之后定期)它都会向INADDR_BROADCAST发送广播 – 无论谁收听所需的端口,都会记住它来自哪里供以后使用。 这个问题是我不想记住我自己的广播。 我认为理论上这很容易做 – 只需找出本地ip并与recvfrom内容进行比较。 但是,我发现很难获得本地IP:带有NULL的getaddrinfo返回127.0.0.1 ,带有主机名的getaddrinfo返回公共IP。 任何人都可以指向我找到实际的子网IP的方向? 我想我必须错过一些非常明显的东西但是……我还是错过了:) 注意:我已经阅读了有关广播的其他SO问题,特别是这一个: 所有接口上的UDP-Broadcast,但我尚未解决多接口问题。

可以通过TCP进行广播吗?

我正在用C编写服务器/客户端系统,它在TCP连接下使用BSD套接字。 服务器是multithreading的,每个连接都在自己的接收器中运行。 每个客户端都能很好地与服务器进行一对一的交谈,遗憾的是我无法想到实现SendToAll()函数的方法,例如,如果客户端A做了需要发送数据包的事情。所有的客户。 我该怎么办? 我正在考虑在每个接收器中实现队列,并且任何广播都被发送到这些队列; 当接收器发出一个新数据包时,它会将该消息添加到数据包中,如果这有意义的话。 但是,有没有办法通过TCP广播,就像你可以通过UDP?

为什么我不能在Ubuntu中创建原始套接字?

我正在学习如何在Linux中使用原始套接字。 我正在尝试创建一个这样的套接字: if ((sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) { perror("socket() failed"); exit(-1); } 但我在发布后获得的是: socket()失败:不允许操作 我知道只有root可以创建原始套接字,但如果我用SUID位或sudo运行它 – 问题是一样的。 怎么了? 该系统是Ubuntu 11.04。 也许我包括不必要的标题? #include #include #include #include #include #include #include #include #include #include #include #include 我想知道 – 为什么SUID没用?

设置winsock recvfrom的超时时间

我试图设置一个阻塞套接字,在尝试端口上的recvfrom()16 ms后超时。 平台是Windows。 我在网上看了很多例子,看起来很简单,我似乎无法让它发挥作用。 任何帮助,将不胜感激! #include #include #pragma comment(lib, “ws2_32.lib”) #define PORT_NUM 8001 int main(void) { std::string localIP; sockaddr_in localAddr; sockaddr_in remoteAddr; hostent* localhost; char buffer[1024]; WSADATA wsData; int result = WSAStartup(MAKEWORD(2,2), &wsData); // winsock version 2 localhost = gethostbyname(“”); localIP = inet_ntoa(*(in_addr*)*localhost->h_addr_list); localAddr.sin_family = AF_INET; localAddr.sin_port = htons(PORT_NUM); // Set Port Number localAddr.sin_addr.s_addr = […]