小编ara*_*EST的帖子

使用BusyBox版本的netcat来监听tcp端口

我需要在Linux嵌入式盒子里面听一些任意的端口.我选择了端口6660,因为它无论如何都是用于未加密的连接,并且由于运行自定义Linux操作系统的Linux机箱没有很多端口打开.我发现netcat(命令行上的nc)将是最容易和最好的解决方案,所以我不必为此目的开始编写一些C程序.

我设法掌握了命令和选项,我实现了最简单的方法来从另一台PC上在我的电脑上听取纯文本,如下所示:

sven@sven:~$ nc 192.168.4.110 6660
sven@sven:~$ hello there!
anotherUser@userg:~$ nc -l -p 6660
anotherUser@userg:~$ hello there!
Run Code Online (Sandbox Code Playgroud)

但是案例是netcat工具随Linux盒子上的busybox包一起出现.而且我不确定如何监听端口的语法(例如6660).我总是得到相同的对话框:

~ # nc -l -p 6660
BusyBox v1.17.1 (Debian 1:1.17.1-8) multi-call binary.
Usage: nc [IPADDR PORT]    
Open a pipe to IP:PORT
Run Code Online (Sandbox Code Playgroud)

此外,我还尝试了许多其他方法来实现听力,但无法完成.我假设至少会给我任何选择吗?也

nc -h
Run Code Online (Sandbox Code Playgroud)

要么

nc --help
Run Code Online (Sandbox Code Playgroud)

不要给任何"减号"选项

但是将文本从Linux嵌入式盒子发送到我的PC可以工作:

~ # nc 192.168.4.130 6660
fsdf
tere
^C
~ #
sven@sven:~$ nc -l -p 6660
fsdf
tere
Run Code Online (Sandbox Code Playgroud)

Linux嵌入式盒子在同一本地网络内部具有全功能网络连接,并且具有现有的eth0和lo链接

eth0      Link encap:Ethernet  HWaddr D0:E3:47:00:03:5F  
          inet addr:192.168.4.179  Bcast:192.168.4.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 …
Run Code Online (Sandbox Code Playgroud)

linux port listener netcat busybox

10
推荐指数
1
解决办法
3万
查看次数

重写方法时,不会出现针对非 POD 类型的“const”指针的编译器警告

一个示例,其中const在派生类中不重写 POD 返回类型:

struct B1
{
    virtual const int* f();
};

struct D1 : B1
{
    int* f() override;
};
Run Code Online (Sandbox Code Playgroud)

Clang 和 GCC 等编译器发出警告:

“virtual int* D1::f()”的协变返回类型无效

当应用相同的场景但返回类型是某个结构/类时,不会引发警告:

struct S
{
};

struct B2
{
    virtual const S* f();
};

struct D2 : B2
{
    S* f() override;
};
Run Code Online (Sandbox Code Playgroud)

我在不同版本的 GCC 上编译了这个。当不使用声明时,在派生类中返回结构/类指针时,我预计会出现类似的警告const

c++ gcc clang compiler-warnings

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

目标Android Makefile的覆盖命令

我试图用g ++编译Android ndk项目中的模块之一,尽管源代码全部在C中。make系统警告使我的眼睛烦恼:

`C:/NVPACK/android-ndk-r8d/build/core/build-binary.mk:348: warning: overriding commands for target 'obj/local/armeabi/objs/xxx/yyy.o'`  
`C:/NVPACK/android-ndk-r8d/build/core/build-binary.mk:345: warning: ignoring old commands for target 'obj/local/armeabi/objs/xxx/yyy.o'`
Run Code Online (Sandbox Code Playgroud)

这些警告对的打印量将与源文件以及对象的打印量一样多。

我尝试用所有不同的样式声明LOCAL_SRC_FILES。

`LOCAL_SRC_FILES :=  
$(LOCAL_PATH)/Directory/source.c   
$(notdir $(wildcard $(LOCAL_PATH)/*.c))  
$(notdir $(wildcard $(LOCAL_PATH)/Directory/*.c))  
$(addprefix DirectoryPrefix/,$(notdir $(wildcard $(LOCAL_PATH)/Directory/*.c)))`
Run Code Online (Sandbox Code Playgroud)

而且警告仍然存在。
Make文档说:
警告:覆盖目标xxx''的命令警告:忽略目标xxx''的旧命令GNU make允许每个目标仅指定一次命令(双冒号规则除外)。如果为已经定义为具有命令的目标提供命令,则会发出此警告,并且第二组命令将覆盖第一组命令。

但我根本不了解这是如何关联的。处理之后,似乎使g ++编译了这些C文件,使此警告出现。
因此,请指定以下语句:
LOCAL_CPP_EXTENSION := .c
导致使用g ++构建C文件的原因。因为当使用gcc进行编译时,不会打印警告。

makefile android-ndk

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

标签 统计

android-ndk ×1

busybox ×1

c++ ×1

clang ×1

compiler-warnings ×1

gcc ×1

linux ×1

listener ×1

makefile ×1

netcat ×1

port ×1