小编use*_*574的帖子

为什么UDP没有“accept()”?

我是从实际意义上问的。在 TCP 中,accept() 将为每个 connect() 提供新的套接字。它允许仅使用一个服务器端口进行多个并发通信。

问题是为什么我们在UDP中没有这样的便利?不要告诉我 UDP 是无连接的,因此...从逻辑上讲,accept() 与此无关(无论如何底层 IP 是无连接的)。

一个后果是您必须应用大量 UDP 端口,这可能会使防火墙设置复杂化。所以我的下一个问题,关于端口和多路复用的多客户端 UDP 应用程序的解决方案是什么?在某些情况下,我想在 UDP 数据包中嵌入客户端信息并让服务器区分。但本质上没有accept(),某些待办事项是困难的(例如,带有OpenSSL 的UDP)。

谢谢你的洞察力。

udp tcp

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

如何在C中使用inotify?

我搜索了与inotify相关的问题,这个问题有点不同......

我使用以下代码来监视一个文件(而不是目录)的更改.在测试中,当我保存目标文件时,read()会返回,这意味着它可以工作.但是event-> mask是32768,它不是IN_MODIFY,名称是空的.另一个问题:它无法持续监控.当我第二次更改文件时,它没有响应.感谢您的帮助!

#include <sys/inotify.h>
#include <unistd.h>
#include <stdio.h>

#define EVENT_SIZE  (sizeof (struct inotify_event))
#define BUF_LEN        (16 * (EVENT_SIZE + 16))

int main()
{
    int fd;
    fd = inotify_init();
    if (fd < 0)
        perror("inotify_init()");

    int wd;
    wd = inotify_add_watch(fd, "target.txt", IN_MODIFY);
    if (wd < 0)
        perror("inotify_add_watch");

    char buf[BUF_LEN];
    int len;

start:

    len = read(fd, buf, BUF_LEN);

    if (len > 0)
    {
        int i = 0;
        while (i < len)
        {
            struct inotify_event *event;
            event = (struct inotify_event *) &buf[i];

            printf("wd=%d …
Run Code Online (Sandbox Code Playgroud)

c inotify

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

nodejs:在for循环中写入多个文件

我还在学习nodejs。这个问题与其他一些问题有关(例如,在 Nodejs 中编写多个文件循环)但有点不同。其实很简单。我想写一些文件,完成后继续其他任务。

没有for循环,我是这样做的,

fs.readFile(f1.path, function(err, data) {
    fs.writeFile("/tmp/" + f1.path, data, function(err) {
        fs.readFile(f2.path, function(err, data) {
            fs.writeFile("/tmp/" + f2.path, data, function(err) {
                ...
                if (err) throw err;

                // do something when all files are written
Run Code Online (Sandbox Code Playgroud)

如果我想使用 for 循环转换它,该怎么做?假设我可以将 f1, f2 ... 放入一个数组中并迭代它们。

感谢您的帮助。

node.js

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

使用互斥锁和条件变量作为成员时如何修复“使用已删除函数”?

我正在做一些多线程练习,但无法编译此代码。我在网上搜索过,但到目前为止还不确定原因。

\n\n
#include <condition_variable>\n#include <functional>\n#include <iostream>\n#include <mutex>\n#include <thread>\n\nusing namespace std;\n\nclass FooBar {\n  private:\n    int n;\n\n  public:\n    FooBar(int n) {\n        this->n = n;\n    }\n\n    void foo(function<void()> printFoo) {\n        for (int i = 0; i < n; i++) {\n            printFoo();\n        }\n    }\n\n    std::mutex foo_mtx;\n    std::condition_variable foo_cv;\n};\n\nvoid printFoo()\n{\n    cout << "foo";\n}\n\nint main ()\n{\n    FooBar foobar(10);\n    std::thread foo_thread = std::thread(&FooBar::foo, foobar, printFoo);\n    foo_thread.join();\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我不添加互斥体和条件变量,此代码可以编译并运行良好。

\n\n
error: use of deleted function \xe2\x80\x98FooBar::FooBar(const FooBar&)\xe2\x80\x99\nerror: use of deleted function \xe2\x80\x98std::mutex::mutex(const std::mutex&)\xe2\x80\x99\nerror: use of deleted …
Run Code Online (Sandbox Code Playgroud)

c++ mutex condition-variable

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

如何在浏览器中查看和清除不受信任的证书?

我正在使用Firefox.对于不受信任的证书,可以选择接受.我想知道在哪里查看这些证书,然后知道如何清除它们.我尝试清理缓存,但之后当我重新加载同一页面(通过HTTPS)时,它不会要求我接受证书.所以它仍然留在浏览器的某个地方.

ssl firefox ssl-certificate

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

Git:如何指定不同的用户来获取?

我以 userA 身份登录到一台计算机。

$ git remote -v 
origin      git:/git/repo/code.git (fetch)
origin      git:/git/repo/code.git (push)
Run Code Online (Sandbox Code Playgroud)

当我执行“git fetch origin”时,它要求输入 userA 的密码。

是否可以以 userB 身份在 git 服务器上获取?

谢谢。

git

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

Ruby:如何将 IP 地址从十六进制字符串转换为人类可读的?

找不到,如有重复请提前道歉。

我想转换地址,例如,

0000000000000000FFFF00000B79290A
Run Code Online (Sandbox Code Playgroud)

成人类可读的形式。请注意,虽然它是 IPv6,但它实际上是嵌入的 IPv4 地址,因此最好将其转换为:

10.41.121.11
Run Code Online (Sandbox Code Playgroud)

我从 /proc/net/tcp 中读取了这种类型的地址,并想对其进行解析。

谢谢你。

ruby

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

命令行界面助手?

我正在使用命令行界面来使我的代码更加用户友好.它目前看起来像这样:

loop do
  print "> "
  cmd = gets.chomp
  break  if cmd == "quit"
  run_command(cmd)
  puts
end
Run Code Online (Sandbox Code Playgroud)

我想稍微扩展它以节省打字.例如,我想允许使用"向上箭头"键重复上一个命令,并使用"Tab"键自动匹配命令等.

有没有工具来缓解这份工作?

ruby

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

MFC:如何绘制带有换行和垂直居中的文本?

以下代码使用 DrawText(单行)和 DrawTextEx(换行)绘制文本。我想要两个都以 v 为中心。

    CRect rect1(50, 50, 100, 125);
    CRect rect2(100, 50, 500, 125);

    CPen pen(PS_SOLID, 0, RGB(192, 192, 192));

    pDC->MoveTo(rect1.left, rect1.top);
    pDC->LineTo(rect2.right, rect2.top);
    pDC->MoveTo(rect1.left, rect1.bottom);
    pDC->LineTo(rect2.right, rect2.bottom);

    pDC->DrawText("hello", rect1, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    pDC->DrawTextEx("0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 ",
                    rect2, DT_EDITCONTROL | DT_WORDBREAK | DT_LEFT | DT_VCENTER, NULL);

Run Code Online (Sandbox Code Playgroud)

输出如下图所示,看起来单行是以 v 为中心的,但不是换行的。另请注意,上面的一些行被覆盖,这也应该解决。

在此输入图像描述

c++ mfc visual-studio-2010 visual-c++

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

Ruby:如何在保持分隔符和分隔符的同时拆分字符串的长度> 1?

以前的相关问题只有长度为== 1的分隔符.

我想要的是以下(例如)

str = 'Hello: Alice Hello: Bob Hello: Charlie Hello: David'
arr = str.magic_split('Hello:')

=> arr[0] = 'Hello: Alice '
   arr[1] = 'Hello: Bob '
   arr[2] = 'Hello: Charlie '
   arr[3] = 'Hello: David'
Run Code Online (Sandbox Code Playgroud)

我尝试过str.scan(/ Hello:/),但不知道如何破解正则表达式以使其工作.非常感谢.

我看到一些答案仅适用于这种特殊情况.让我更具体一点.

我要分割的文件如下所示,分隔符为"证书:"

Certificate:
    Data: ...
    Signature Algorithm: ...
...
-----BEGIN CERTIFICATE-----
F19ibG6uZyBJbmR1c3RyaWVzIEluYzESMBAGA1UECwwJTWV6emFuaW5lMRMwEQYD\n
2O2RV6HR84N2/A5ZPRF8AQMXJCLIR4qMe/d97/1XK6JQQLUI5NaNroUkW3+tjXo/\n
ovl3vom6xOwUUcFDdv2QoCYBVADX7W2RaVP0JGfiDcekOTwtdos/tmsblboR8oEp\n
fbxD45AowT+khXnPDCQWWpslXJoKMBkaWH7ajb+yKfEYGzRPEmq+v/FPMY9mlJhX\n
epciB5FNO5krO+cyhky5tBZTIv7qCu3kc36dcQXIOTakc7CdoVgwLnytebwTqtpG\n
KuLLH46U8Pp3eeiDDBxYJlz6a2bsbtOaKb1CKMFB3x8LLfLbF4Sh+ScDHetkJDh5\n
...
Certificate:
...
Certificate:
...
Run Code Online (Sandbox Code Playgroud)

基本上,在"证书:"之间会有随机的ASCII字符.

再次感谢.

ruby regex

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

bash:什么"!" 意思是回声"$ {!var}"?

我在某人的shell脚本文件中看到它.

#!/bin/bash

var=...

echo "${!var}"
Run Code Online (Sandbox Code Playgroud)

什么"!" 这意味着什么

bash

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

python3:日志记录不显示日志级别?

这是我正在使用的python。

$ python3 --version
Python 3.5.2
Run Code Online (Sandbox Code Playgroud)

这是一些谷歌搜索后的测试代码(如何通过 Python 登录到 journald (systemd)?)。我正在尝试使用日志日志。

#!/usr/bin/python3

import logging
from systemd.journal import JournalHandler

log = logging.getLogger('test')
log.addHandler(JournalHandler())
log.setLevel(logging.DEBUG)
log.warning("warn")
log.info("info")
log.error("error")
log.debug("debug")
Run Code Online (Sandbox Code Playgroud)

我期待在日志中看到类似的内容:

WARNING: warn
INFO: info
ERROR: error
DEBUG: debug
Run Code Online (Sandbox Code Playgroud)

但这就是实际显示的内容:

Nov 22 09:29:56 host1 ./test_log.py[8997]: warn
Nov 22 09:29:56 host1 ./test_log.py[8997]: info
Nov 22 09:29:56 host1 ./test_log.py[8997]: error
Nov 22 09:29:56 host1 ./test_log.py[8997]: debug
Run Code Online (Sandbox Code Playgroud)

日志消息没有日志级别的前缀。谢谢您的帮助。

更多信息,

我也尝试格式化。

logging.basicConfig(format='%(levelname)s %(message)s')
Run Code Online (Sandbox Code Playgroud)

然后在标准输出上,我可以看到日志级别,但仍然没有在日志中。

python-3.x

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

内存访问:为什么它不会崩溃以及如何强制执行它?

我希望以下代码会产生某些内存访问错误,但事实并非如此.有没有办法在编译期间强制执行它?

#include <iostream>
class B {};
class D : public B
{ public: int d; };

using namespace std;

main()
{
    B *pB = new B;
    ((D*)pB)->d = 2;
    cout << ((D*)pB)->d << endl;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,将指针指向D不会改变内存分配,因此访问"d"应该是非法的,对吗?

c++

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