标签: network-programming

TCP 连接 VS ping 服务器

我必须检测服务器是否打开或关闭,有些人告诉我尝试使用 ping 方式,如果它不起作用我应该在我和服务器之间使用 TCP 连接。有人可以解释一下它们之间有什么区别吗?为什么 ping 方式可能效果不好?谢谢。

c# networking network-programming

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

recv() 和accept() 可以互换吗?

我有一个设置为listen()的套接字

通常我会基于通过 select() 准备好的文件描述符来接受这些连接。我可以将其更改为具有相同文件描述符的recv() 而不是accept() 吗?

c sockets network-programming

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

网络编程中什么时候使用ntohs函数?

我正在使用 WinPcap 学习网络编程。这是片段:

int ip_hlen = (ih->ver_ihl & 0xf) * 4; /* get ip header length */
tcp_header *th = (tcp_header *) ((u_char*)ih + ip_len);
int tcp_hlen = (ntohs(th->th_len_resv_code) & 0xf000) >> 12)*4; /* get tcp header length */
Run Code Online (Sandbox Code Playgroud)

问题是为什么ntohs只有在获取 tcp_hlennot时才使用ip_hlen
事实上,ntohs只接受u_short作为参数解释一点。http://msdn.microsoft.com/en-us/library/windows/desktop/ms740075%28v=vs.85%29.aspx

我仍然对何时使用 ntohs 何时不使用感到困惑。

以下是 IP 和 TCP 数据包定义的结构:

/* ipv4 header */
typedef struct ip_header {
    u_char ver_ihl;         /* version and ip header length */
    u_char tos;             /* …
Run Code Online (Sandbox Code Playgroud)

c c++ network-programming winpcap libpcap

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

使用UDP协议接收数据并读取数据报

在帮助我使用 UDP 协议向某人正确发送数据的第一个主题之后,我在接收这些数据时遇到了问题。这个问题很奇怪,只有在我第一次启动发送数据的功能时才会出现。第一次,服务器只接收第一帧。但之后,如果我重新使用该功能,一切都会好的。

这是通过UDP协议发送数据的代码(我的数据是一个结构体):

void MyUDP::sendUDP()
{
    //Structure to send
    typedef struct MyStructTag
    {
       int test1;
       bool test2;
       char test3;
    } MyStruct;

    MyStruct envoie;

    envoie.test1 = 1;
    envoie.test2 = true;
    envoie.test3 = 97;

    // Sends the datagram datagram
    // to the host address and at port.
    // qint64 QUdpSocket::writeDatagram(const QByteArray & datagram,
    //                      const QHostAddress & host, quint16 port)

    QByteArray buf;
    QDataStream s(&buf, QIODevice::WriteOnly);
    // The encoding is big endian by default, on all systems. You
    // can change it …
Run Code Online (Sandbox Code Playgroud)

c++ qt udp network-programming

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

关闭多线程程序中的文件描述符

我有一个线程来接受传入连接:

pthread_t thread;

pthread_create(&thread, NULL, worker_func, NULL);
pthread_detach(thread);
Run Code Online (Sandbox Code Playgroud)

然后worker_func

<snip>
fd = accept(GlobalFD, NULL, NULL);
<snip>
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试GlobalFD在原始线程中关闭,accept 仍会阻塞(如果 GlobalFD 关闭,我希望它失败)。我在网上查看了其他问题,但似乎找不到我的特定问题的答案。

有任何想法吗?谢谢

c multithreading network-programming

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

在 Golang 中检查 IP 地址切片中的 IP 的有效方法

我正在 Golang 中开发一个网络应用程序。我有一个 IP 地址片段。每次收到请求时,我都会用来net.LookupIP(host)查找返回net.IP. 比较这些的最佳方法是什么?

顺便说一句,在 Python 中我们有一个set数据结构,这使得上面的问题很容易解决,但是 Go 呢?

arrays ip network-programming go slice

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

如何使用 dnspython 查询某个域的所有 IP

我使用dnspython查询 DNS 服务器以将域名解析为其 IP。

当我尝试解析“google.co.uk”时,我只得到一个 IP。然而,使用另一个解析器工具我得到另一个IP。两个IP都是正确的,我通过将IP放在浏览器中来测试它们,都打开“google.co.uk”。

显然,为我正在测试的域名分配了多个IP。有什么方法可以在 dnspython 中使用来检索给定域名的所有 IP 吗?

这是我的简单脚本:

import dns.resolver

def resolve(domain):
  resolveList = []
      resolver = dns.resolver.Resolver(); #create a new instance named Resolver
      answer = resolver.query(domain,"A");
      y=0
      for rData in answer: 
          resolveList.append(rData)
          ++y        
  return resolveList

domainName = "google.co.uk"
queryResult = resolve(domainName);
for result in queryResult:
    print queryResult[0]
Run Code Online (Sandbox Code Playgroud)

python sockets dns network-programming dnspython

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

GetAdaptersAddresses() 未给出正确的 IP 地址

我正在使用 USB Internet 加密狗为我的计算机分配 IPv6 地址。当我使用 时ipconfig,我可以看到分配的 IPv6 地址,它是公共 IP。

当我使用 时GetAdaptersAddresses(),我得到了一个长链表,其中包含任播、多播和单播地址,但它们都不与系统的 IP 地址匹配。

还有其他地方可以获取系统的IP吗?我实际上想获取系统的 IP 地址,以便将其绑定到套接字。

我使用Windows 7。

// getadaptersinfo.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<WinSock2.h>
#include<iphlpapi.h>
#include<ws2tcpip.h>
#include<iostream>
#pragma comment(lib,"IPHLPAPI.lib")
#pragma comment(lib,"Ws2_32.lib")
using namespace std;

int main()
{
    cout << "\nusing getadapteraddress";
    PIP_ADAPTER_ADDRESSES p, tp;
    ULONG u;
    DWORD ret;
    p = (IP_ADAPTER_ADDRESSES*)HeapAlloc(GetProcessHeap(), 0, sizeof(IP_ADAPTER_ADDRESSES));
    u = sizeof(p);
    GetAdaptersAddresses(0, GAA_FLAG_INCLUDE_PREFIX, NULL, p, &u);
    p = (IP_ADAPTER_ADDRESSES*)HeapAlloc(GetProcessHeap(), 0, u); …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets network-programming visual-c++

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

暂时停止套接字的侦听

我正在使用 POSIX 套接字 API 用 C++ 编写服务器。

它作为 GUI 应用程序的一部分运行,该应用程序需要能够停止和启动服务器侦听数据并向客户端发送数据。

服务器的主要部分基本上看起来像这样(我排除了很多代码,因为其中一些代码与这个问题无关。)

if (listen(listener_fd, backlog) < 0) {
    std::perror("listen");
    exit(EXIT_FAILURE);
}

while (true) {
    /* This part sets up the FD set */
    FD_ZERO(&read_fds);
    FD_SET(0, &read_fds); // stdin (for server commands)
    FD_SET(listener_fd, &read_fds);
    FD_SET(read_pipe, &read_fds);
    for (auto it = client_socks.begin(); it != client_socks.end(); it++) {
        FD_SET(*it, &read_fds); // listen on each of the open client-server sockets
    }

    max_fd = 0;
    if (client_socks.size() > 0) {
        max_fd = *std::max_element(client_socks.begin(), client_socks.end());
    }
    if …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets network-programming

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

检测 Android 上是否配置了永远在线的 VPN

我有一个 Android VPN 应用程序。当我触发启动 VPN 的意图(通过VPNService.prepare)时,如果设备上已配置始终在线的 VPN,它会立即失败。这看起来很合理,但我希望能够轻松检测到这种情况,这样我就可以向用户显示有用的消息。

我所说的“始终在线”是指特定的 VPN 始终在线 Android VPN 标志: https: //developer.android.com/guide/topics/connectivity/vpn#always-on

我似乎无法找到一种方法来访问该信息,即使它在 Android 内部使用(例如,这里,但getAlwaysOnVpnPackage似乎没有公开 AFAICT)。

我见过的最好的选择是检查 Android 中的 VPN 连接是否处于活动状态?,它会告诉您当前是否有任何 VPN 连接处于活动状态,但这还不够,因为:

  • 我不想了解临时 VPN 连接:我只对始终在线的VPN 连接感兴趣。
  • 有时“永远在线”的连接实际上并不总是在线。如果您的连接已断开并将其设置为“始终开启”,则它会按此配置,并阻止所有其他 VPN 安装,但不会创建任何网络连接(Android 会显示持续警告,这会将您带到其他应用程序激活连接)。由于没有连接,因此上述技术不起作用。我仍然需要检测这种情况,因为它仍然阻止我的 VPN 设置。

有什么方法可以检查设备当前是否将 VPN 配置为“始终开启”?

vpn android network-programming

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

标签 统计

network-programming ×10

c ×5

c++ ×4

sockets ×4

android ×1

arrays ×1

c# ×1

dns ×1

dnspython ×1

go ×1

ip ×1

libpcap ×1

multithreading ×1

networking ×1

python ×1

qt ×1

slice ×1

udp ×1

visual-c++ ×1

vpn ×1

winpcap ×1