标签: network-programming

如果我们只知道IP,如何知道服务器是否在线?

怎么办,服务器不是HTTP服务器,它是ArmA游戏服务器.我试图在下面的代码中使用CURL实现它,但它不起作用,它总是显示脱机.

IsOnline( "xx.xxx.xx.xxx" );

    bool IsOnline( string url )
    {

        CURL *curl;

        curl = curl_easy_init();

        if(curl) 
        {
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str() );


            CURLcode result = curl_easy_perform(curl);
            if ( result != CURLE_OK )
            {
               error_string = curl_easy_strerror( result );
               return false;
            }

            curl_easy_cleanup(curl);
            curl_global_cleanup();
            return true;
        }

        curl_easy_cleanup(curl);
        curl_global_cleanup();
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

c++ winapi curl network-programming

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

Windows提升asio:在async_cend_to上的async_receive_from中为10061

我有一个相当大的应用程序,可以在Linux上按需运行.我最近使用VC2012在Windows 7上编译并使用了增强asio 1.52并遇到了一个奇怪的问题:

在同一个UDP套接字上async_receive_from跟随一个后async_send_to导致使用boost::system::error_code10061 调用读取完成处理程序:

无法建立连接,因为目标计算机主动拒绝它

如果发送目标是本地主机上的另一个端口.如果数据包被发送到另一台机器,则不会调用读取完成处理程序.在读取完成处理程序之后,将调用写入完成处理程序而不会出现错误.

以下代码复制了该问题:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>

using namespace std;
using namespace boost::asio;

void read_completion_handler(const boost::system::error_code& ec, std::size_t bytes_received)
{
  if (!ec)
    cout << "Received " << bytes_received << " successfully" << endl;
  else
    cout << "Error: " << ec.message() << endl;
}

void write_completion_handler(const boost::system::error_code& ec, std::size_t bytes_transferred)
{
  if (!ec)
    cout << "Wrote " << bytes_transferred << " successfully" << endl;
  else …
Run Code Online (Sandbox Code Playgroud)

windows udp network-programming boost-asio

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

套接字权限ubuntu

嗨,我是Linux新手,有一个与套接字相关的项目.我面临的问题是,当我使用输入eth0 for interface和我的路由器的IP地址 运行代码时,./mycode eth0 192.168.1.1它会出错

您无权在该设备上捕获(套接字:不允许操作)

我从链接中获取的代码是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pcap.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <net/ethernet.h>
#include <netinet/if_ether.h>
#include <sys/ioctl.h>

int main(int argc,const char* argv[]) {
    // Get interface name and target IP address from command line.
    if (argc<2) {
        fprintf(stderr,"usage: send_arp <interface> <ipv4-address>\n");
        exit(1);
    }
    const char* if_name=argv[1];
    const char* target_ip_string=argv[2];

    // Construct Ethernet header (except for source MAC address).
    // (Destination set to broadcast address, FF:FF:FF:FF:FF:FF.)
    struct ether_header header; …
Run Code Online (Sandbox Code Playgroud)

c linux network-programming raw-sockets ubuntu-12.04

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

C#应用程序需要在Citrix环境中引用远程工作站

我有一个C#独立的Windows窗体应用程序.它连接到后台系统,该系统需要工作站名称作为识别过程的一部分.我正在使用Environment.MachineName来获取此信息.但是,使用此应用程序的客户偶尔会在Citrix环境下运行它,当他们这样做时,他们希望它引用远程计算机名称,而不是它所安装的计算机.我之前从未编写任何类似的东西,而且我对Citrix不熟悉(所以我开始了.)如何获取远程计算机名称?任何想法都非常感激.

非常感谢提前.

c# network-programming citrix winforms

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

数据包嗅探器的原理

我想知道数据包嗅探器的原理.他们如何捕获其他应用程序的数据包?

我一直在考虑这个问题.我有一个理论.这与代理服务器的工作方式有关吗?当使用某些特殊API时,所有本地应用程序都会将其数据包发送到指定的ip而不是原始数据包.数据包嗅探器接收并复制,最后将它们发送回原始目的地.是对的吗?

你能解释一下数据包嗅探器是如何工作的吗?提前谢谢你的帮助.

c proxy winapi network-programming tcp-ip

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

8位输入给出奇怪的行为,因为16/32位给出了小Endian/Big Endian

我有这样的C结构......

struct icmp_prefixopt {
    u_int8_t        icmpopt_type;
    u_int8_t        icmpopt_len;
    u_int8_t        prefixlen;
    u_int8_t        lflag:1;
    u_int8_t        aflag:1;
    u_int8_t        reserved:6;

};
Run Code Online (Sandbox Code Playgroud)

我在同一个模块中为这样的成员提供了价值 -

   popt= (struct icmp_prefixopt *)
                    malloc(sizeof(struct icmp_prefixopt));

  popt->icmpopt_type = 3;
  popt->icmpopt_len = 4;
  popt->prefixlen = (u_int8_t)strtoul(arg, (char **)NULL, 0);

     arg = index(arg, '+');
            if (arg) {
                    ++arg;
                    popt->lflag = ((u_int8_t)strtoul(arg, (char **)NULL, 0))&1;
            }


     arg = index(arg, '+');
            if (arg) {
                    ++arg;
                    popt->aflag = ((u_int8_t)strtoul(arg, (char **)NULL, 0))&1;
            }


     arg = index(arg, '+');
            if (arg) {
                    ++arg;
                 popt->reserved = 32;  //((u_int8_t)strtoul(arg, (char …
Run Code Online (Sandbox Code Playgroud)

c struct pointers network-programming bit-manipulation

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

无法绑定到本地端口 - WSAEADDRINUSE

我们在Windows上有一个服务器应用程序无法在本地端口(3050)上绑定,从而产生错误 WSAEADDRINUSE - Address already in use.

但是,我已经使用SysInternals实用程序(TCPView)检查过没有进程正在侦听该端口.

请提出建议背后的原因以及解决此问题的任何解决方法.

提前致谢.

c++ port network-programming bind

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

在linux中接收乱序udp数据包

我在linux c ++程序中观察到意外乱序的数据包接收序列.在限制接收套接字的数量后,它再次按顺序接收数据包.另外,我还用boost :: asio或epoll明确地测试了这个问题,但它们都产生了相同的结果.另一方面,在Window环境下(使用boost.asio),同一程序可以正常工作.

我发现相当奇怪,我知道udp协议不保证数据包接收顺序.但是,广播发送方和接收方之间只有1个交换机.因此,我认为,实际上不可能出现故障.加上相同的程序在Window OS(在同一网络下)下工作正常.

假设数据包保证在传输层按顺序到达.额外的序列号检查不是一个选项,更改协议也不是.

c++ udp network-programming epoll boost-asio

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

从麦克风听到传入的音频

我只是想听听我对使用NAudio的麦克风的说法,这是我的代码到目前为止,但问题是我听不到任何声音.任何帮助,将不胜感激.

public partial class frmMain : Form
    {
        private WaveIn waveIn; // Gets an audio from microphone
        private WaveOut waveOut; // Sends audio to speaker
        private BufferedWaveProvider waveProvider; // Gets an audio from stream

        public frmMain()
        {
            InitializeComponent();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            waveOut = new WaveOut();
            waveIn = new WaveIn();
            waveProvider = new BufferedWaveProvider(waveIn.WaveFormat);

            waveOut.Init(waveProvider);             

            waveIn.DataAvailable += waveIn_DataAvailable;

            waveOut.Play();            
        }

        private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            waveProvider.Read(e.Buffer, 0, e.BytesRecorded);
        }

        private void btnStop_Click(object sender, EventArgs …
Run Code Online (Sandbox Code Playgroud)

c# sockets network-programming naudio

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

Go package syscall conn.Read()是非阻塞的并导致高CPU使用率

奇怪的是,在我的情况下Read()是非阻塞并导致高CPU使用率.

我的代码:

功能main:

l, err := net.Listen("tcp", ":13798")


if err != nil {
    log.Fatal(err)
  }

  for {
    // Wait for a connection.
    conn, err := l.Accept()
    if err != nil {
      log.Fatal(err)
    }
    // Handle the connection in a new goroutine.
    // The loop then returns to accepting, so that
    // multiple connections may be served concurrently.
    go reqHandler.TCPHandler(conn)

    runtime.Gosched()
  }
Run Code Online (Sandbox Code Playgroud)

功能TCPHandler:

func TCPHandler(conn net.Conn) {
request := make([]byte, 4096)
  for {
    read_len, err …
Run Code Online (Sandbox Code Playgroud)

networking network-programming tcp system-calls go

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