在linux的网络编程,特别是TCP的编程中,SIGPIPE信号错误是一个比较常见的问题,我猜测你是在使用TCP的socket吧,如果是这样的话,很有可能是你在向一个已经处于关闭状态的socket写数据,因为TCP是面向连接的协议。如果对方将socket给close掉了,而你还继续往这个socket写数据,就会触发这个信号。因此,建议你在write之前检查一下对方是否已经close掉了这个socket。如果回答得不对,可以继续追问哈
❷ Linux怎么使用ss命令查看系统的socket状态
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。)
命令格式:
ss [参数]
ss [参数] [过滤]
2.命令功能:
ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。
3.命令参数:
-h, --help 帮助信息
-V, --version 程序版本信息
-n, --numeric 不解析服务名称
-r, --resolve 解析主机名
-a, --all 显示所有套接字(sockets)
-l, --listening 显示监听状态的套接字(sockets)
-o, --options 显示计时器信息
-e, --extended 显示详细的套接字(sockets)信息
-m, --memory 显示套接字(socket)的内存使用情况
-p, --processes 显示使用套接字(socket)的进程
-i, --info 显示 TCP内部信息
-s, --summary 显示套接字(socket)使用概况
-4, --ipv4 仅显示IPv4的套接字(sockets)
-6, --ipv6 仅显示IPv6的套接字(sockets)
-0, --packet 显示 PACKET 套接字(socket)
-t, --tcp 仅显示 TCP套接字(sockets)
-u, --udp 仅显示 UCP套接字(sockets)
-d, --dccp 仅显示 DCCP套接字(sockets)
-w, --raw 仅显示 RAW套接字(sockets)
-x, --unix 仅显示 Unix套接字(sockets)
-f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F, --filter=FILE 从文件中都去过滤器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
4.使用实例:
实例1:显示TCP连接
命令:ss -t -a
输出:
代码如下:
[root@localhost ~]# ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 127.0.0.1:smux *:*
LISTEN 0 0 *:3690 *:*
LISTEN 0 0 *:ssh *:*
ESTAB 0 0 192.168.120.204:ssh 10.2.0.68:49368
[root@localhost ~]#
实例2:显示 Sockets 摘要
命令:ss -s
输出:
代码如下:
[root@localhost ~]# ss -s
Total: 34 (kernel 48)
TCP: 4 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 3《/p》《p》Transport Total IP IPv6
* 48 - -
RAW 0 0 0
UDP 5 5 0
TCP 4 4 0
INET 9 9 0
FRAG 0 0 0
[root@localhost ~]#
说明:列出当前的established, closed, orphaned and waiting TCP sockets
实例3:列出所有打开的网络连接端口
命令:ss -l
输出:
代码如下:
[root@localhost ~]# ss -l
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 127.0.0.1:smux *:*
0 0 *:3690 *:*
0 0 *:ssh *:*
[root@localhost ~]#
实例4:查看进程使用的socket
命令:ss -pl
输出:
代码如下:
[root@localhost ~]# ss -pl
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 127.0.0.1:smux *:* users:((“snmpd”,2716,8))
0 0 *:3690 *:* users:((“svnserve”,3590,3))
0 0 *:ssh *:* users:((“sshd”,2735,3))
[root@localhost ~]#
实例5:找出打开套接字/端口应用程序
命令:ss -lp | grep 3306
输出:
代码如下:
[root@localhost ~]# ss -lp|grep 1935
0 0 *:1935 *:* users:((“fmsedge”,2913,18))
0 0 127.0.0.1:19350 *:* users:((“fmsedge”,2913,17))
[root@localhost ~]# ss -lp|grep 3306
0 0 *:3306 *:* users:((“mysqld”,2871,10))
[root@localhost ~]#
实例6:显示所有UDP Sockets
命令:ss -u -a
输出:
代码如下:
[root@localhost ~]# ss -u -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 127.0.0.1:syslog *:*
UNCONN 0 0 *:snmp *:*
ESTAB 0 0 192.168.120.203:39641 10.58.119.119:domain
[root@localhost ~]#
实例7:显示所有状态为established的SMTP连接
命令:ss -o state established ‘( dport = :smtp or sport = :smtp )’
输出:
代码如下:
[root@localhost ~]# ss -o state established ‘( dport = :smtp or sport = :smtp )’
Recv-Q Send-Q Local Address:Port Peer Address:Port
[root@localhost ~]#
实例8:显示所有状态为Established的HTTP连接
命令:ss -o state established ‘( dport = :http or sport = :http )’
输出:
代码如下:
[root@localhost ~]# ss -o state established ‘( dport = :http or sport = :http )’
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 75.126.153.214:2164 192.168.10.42:http
[root@localhost ~]#
实例9:列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字
命令:ss -o state fin-wait-1 ‘( sport = :http or sport = :https )’ dst 193.233.7/24
实例10:用TCP 状态过滤Sockets:
命令:
代码如下:
ss -4 state FILTER-NAME-HERE
ss -6 state FILTER-NAME-HERE
输出:
代码如下:
[root@localhost ~]#ss -4 state closing
Recv-Q Send-Q Local Address:Port Peer Address:Port
1 11094 75.126.153.214:http 192.168.10.42:4669
说明:
FILTER-NAME-HERE 可以代表以下任何一个:
代码如下:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all : 所有以上状态
connected : 除了listen and closed的所有状态
synchronized :所有已连接的状态除了syn-sent
bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv.
big : 和bucket相反。
实例11:匹配远程地址和端口号
命令:
代码如下:
ss dst ADDRESS_PATTERN
ss dst 192.168.1.5
ss dst 192.168.119.113:http
ss dst 192.168.119.113:smtp
ss dst 192.168.119.113:443
输出:
代码如下:
[root@localhost ~]# ss dst 192.168.119.113
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.119.103:16014 192.168.119.113:20229
ESTAB 0 0 192.168.119.103:16014 192.168.119.113:61056
ESTAB 0 0 192.168.119.103:16014 192.168.119.113:61623
ESTAB 0 0 192.168.119.103:16014 192.168.119.113:60924
ESTAB 0 0 192.168.119.103:16050 192.168.119.113:43701
ESTAB 0 0 192.168.119.103:16073 192.168.119.113:32930
ESTAB 0 0 192.168.119.103:16073 192.168.119.113:49318
ESTAB 0 0 192.168.119.103:16014 192.168.119.113:3844
[root@localhost ~]# ss dst 192.168.119.113:http
State Recv-Q Send-Q Local Address:Port Peer Address:Port
[root@localhost ~]# ss dst 192.168.119.113:3844
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.119.103:16014 192.168.119.113:3844
[root@localhost ~]#
实例12:匹配本地地址和端口号
命令:
代码如下:
ss src ADDRESS_PATTERN
ss src 192.168.119.103
ss src 192.168.119.103:http
ss src 192.168.119.103:80
ss src 192.168.119.103:smtp
ss src 192.168.119.103:25
输出:
代码如下:
[root@localhost ~]# ss src 192.168.119.103:16021
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.119.103:16021 192.168.119.201:63054
ESTAB 0 0 192.168.119.103:16021 192.168.119.201:62894
ESTAB 0 0 192.168.119.103:16021 192.168.119.201:63055
ESTAB 0 0 192.168.119.103:16021 192.168.119.201:2274
ESTAB 0 0 192.168.119.103:16021 192.168.119.201:44784
ESTAB 0 0 192.168.119.103:16021 192.168.119.201:7233
ESTAB 0 0 192.168.119.103:16021 192.168.119.103:58660
ESTAB 0 0 192.168.119.103:16021 192.168.119.201:44822
ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56737
ESTAB 0 0 192.168.119.103:16021 10.2.1.206:57487
ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56736
ESTAB 0 0 192.168.119.103:16021 10.2.1.206:64652
ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56586
ESTAB 0 0 192.168.119.103:16021 10.2.1.206:64653
ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56587
[root@localhost ~]#
实例13:将本地或者远程端口和一个数比较
命令:
代码如下:
ss dport OP PORT
ss sport OP PORT
输出:
代码如下:
[root@localhost ~]# ss sport = :http
[root@localhost ~]# ss dport = :http
[root@localhost ~]# ss dport \》 :1024
[root@localhost ~]# ss sport \》 :1024
[root@localhost ~]# ss sport \《 :32000
[root@localhost ~]# ss sport eq :22
[root@localhost ~]# ss dport != :22
[root@localhost ~]# ss state connected sport = :http
[root@localhost ~]# ss \( sport = :http or sport = :https \)
[root@localhost ~]# ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
说明:
ss dport OP PORT 远程端口和一个数比较;ss sport OP PORT 本地端口和一个数比较。
OP 可以代表以下任意一个:
《= or le : 小于或等于端口号
》= or ge : 大于或等于端口号
== or eq : 等于端口号
!= or ne : 不等于端口号
《 or gt : 小于端口号
》 or lt : 大于端口号
实例14:ss 和 netstat 效率对比
命令:
代码如下:
time netstat -at
time ss
输出:
代码如下:
[root@localhost ~]# time ss
real 0m0.739s
user 0m0.019s
sys 0m0.013s
[root@localhost ~]#
[root@localhost ~]# time netstat -at
real 2m45.907s
user 0m0.063s
sys 0m0.067s
[root@localhost ~]#
说明:
用time 命令分别获取通过netstat和ss命令获取程序和概要占用资源所使用的时间。在服务器连接数比较多的时候,netstat的效率完全没法和ss比。
❸ socket编程:我想将socket程序里的输入在命令行运行时就给出数值,请问有什么函数吗
通过命令行将参数传递给程序不能使用scanf。需要为main函数添加参数
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char * argv[])//argc参数的个数,argv存放参数的数组
{
int a = 0;
int b = 0;
if(argc == 3)
{
a = atoi(argv[1]);
b = atoi(argv[2]);
}
printf("\na+b=%d\n",a+b);
return 0;
}
argc是命令行参数的个数这里是3
argv存放的是参数,第一个是命令"add_s",第二个是"3",第三个是"2"
❹ Linux怎么使用ss命令查看系统的socket状态
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。) 命令格式: ss [参数] ss [参数] [过滤] 2.命令功能: ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。 3.命令参数: -h, --help 帮助信息 -V, --version 程序版本信息 -n, --numeric 不解析服务名称 -r, --resolve 解析主机名 -a, --all 显示所有套接字(sockets) -l, --listening 显示监听状态的套接字(sockets) -o, --options 显示计时器信息 -e, --extended 显示详细的套接字(sockets)信息 -m, --memory 显示套接字(socket)的内存使用情况 -p, --processes 显示使用套接字(socket)的进程 -i, --info 显示 TCP内部信息 -s, --summary 显示套接字(socket)使用概况 -4, --ipv4 仅显示IPv4的套接字(sockets) -6, --ipv6 仅显示IPv6的套接字(sockets) -0, --packet 显示 PACKET 套接字(socket) -t, --tcp 仅显示 TCP套接字(sockets) -u, --udp 仅显示 UCP套接字(sockets) -d, --dccp 仅显示 DCCP套接字(sockets) -w, --raw 仅显示 RAW套接字(sockets) -x, --unix 仅显示 Unix套接字(sockets) -f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink -A, --query=QUERY, --socket=QUERY QUERY := {}[,QUERY] -D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件 -F, --filter=FILE 从文件中都去过滤器信息 FILTER := [ state TCP-STATE ] [ EXPRESSION ] 4.使用实例: 实例1:显示TCP连接 命令:ss -t -a 输出: 代码如下: [root@localhost ~]# ss -t -a State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 0 127.0.0.1:smux *:* LISTEN 0 0 *:3690 *:* LISTEN 0 0 *:ssh *:* ESTAB 0 0 192.168.120.204:ssh 10.2.0.68:49368 [root@localhost ~]# 实例2:显示 Sockets 摘要 命令:ss -s 输出: 代码如下: [root@localhost ~]# ss -s Total: 34 (kernel 48) TCP: 4 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 3《/p》 《p》Transport Total IP IPv6 * 48 - - RAW 0 0 0 UDP 5 5 0 TCP 4 4 0 INET 9 9 0 FRAG 0 0 0 [root@localhost ~]# 说明:列出当前的established, closed, orphaned and waiting TCP sockets 实例3:列出所有打开的网络连接端口 命令:ss -l 输出: 代码如下: [root@localhost ~]# ss -l Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 127.0.0.1:smux *:* 0 0 *:3690 *:* 0 0 *:ssh *:* [root@localhost ~]# 实例4:查看进程使用的socket 命令:ss -pl 输出: 代码如下: [root@localhost ~]# ss -pl Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 127.0.0.1:smux *:* users:((“snmpd”,2716,8)) 0 0 *:3690 *:* users:((“svnserve”,3590,3)) 0 0 *:ssh *:* users:((“sshd”,2735,3)) [root@localhost ~]# 实例5:找出打开套接字/端口应用程序 命令:ss -lp grep 3306 输出: 代码如下: [root@localhost ~]# ss -lpgrep 1935 0 0 *:1935 *:* users:((“fmsedge”,2913,18)) 0 0 127.0.0.1:19350 *:* users:((“fmsedge”,2913,17)) [root@localhost ~]# ss -lpgrep 3306 0 0 *:3306 *:* users:((“mysqld”,2871,10)) [root@localhost ~]# 实例6:显示所有UDP Sockets 命令:ss -u -a 输出: 代码如下: [root@localhost ~]# ss -u -a State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 127.0.0.1:syslog *:* UNCONN 0 0 *:snmp *:* ESTAB 0 0 192.168.120.203:39641 10.58.119.119:domain [root@localhost ~]# 实例7:显示所有状态为established的SMTP连接 命令:ss -o state established ‘( dport = :smtp or sport = :smtp )’ 输出: 代码如下: [root@localhost ~]# ss -o state established ‘( dport = :smtp or sport = :smtp )’ Recv-Q Send-Q Local Address:Port Peer Address:Port [root@localhost ~]# 实例8:显示所有状态为Established的HTTP连接 命令:ss -o state established ‘( dport = :http or sport = :http )’ 输出: 代码如下: [root@localhost ~]# ss -o state established ‘( dport = :http or sport = :http )’ Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 75.126.153.214:2164 192.168.10.42:http [root@localhost ~]# 实例9:列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字 命令:ss -o state fin-wait-1 ‘( sport = :http or sport = :https )’ dst 193.233.7/24 实例10:用TCP 状态过滤Sockets: 命令: 代码如下: ss -4 state FILTER-NAME-HERE ss -6 state FILTER-NAME-HERE 输出: 代码如下: [root@localhost ~]#ss -4 state closing Recv-Q Send-Q Local Address:Port Peer Address:Port 1 11094 75.126.153.214:http 192.168.10.42:4669 说明: FILTER-NAME-HERE 可以代表以下任何一个: 代码如下: established syn-sent syn-recv fin-wait-1 fin-wait-2 time-wait closed close-wait last-ack listen closing all : 所有以上状态 connected : 除了listen and closed的所有状态 synchronized :所有已连接的状态除了syn-sent bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv. big : 和bucket相反。 实例11:匹配远程地址和端口号 命令: 代码如下: ss dst ADDRESS_PATTERN ss dst 192.168.1.5 ss dst 192.168.119.113:http ss dst 192.168.119.113:smtp ss dst 192.168.119.113:443 输出: 代码如下: [root@localhost ~]# ss dst 192.168.119.113 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.119.103:16014 192.168.119.113:20229 ESTAB 0 0 192.168.119.103:16014 192.168.119.113:61056 ESTAB 0 0 192.168.119.103:16014 192.168.119.113:61623 ESTAB 0 0 192.168.119.103:16014 192.168.119.113:60924 ESTAB 0 0 192.168.119.103:16050 192.168.119.113:43701 ESTAB 0 0 192.168.119.103:16073 192.168.119.113:32930 ESTAB 0 0 192.168.119.103:16073 192.168.119.113:49318 ESTAB 0 0 192.168.119.103:16014 192.168.119.113:3844 [root@localhost ~]# ss dst 192.168.119.113:http State Recv-Q Send-Q Local Address:Port Peer Address:Port [root@localhost ~]# ss dst 192.168.119.113:3844 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.119.103:16014 192.168.119.113:3844 [root@localhost ~]# 实例12:匹配本地地址和端口号 命令: 代码如下: ss src ADDRESS_PATTERN ss src 192.168.119.103 ss src 192.168.119.103:http ss src 192.168.119.103:80 ss src 192.168.119.103:smtp ss src 192.168.119.103:25 输出: 代码如下: [root@localhost ~]# ss src 192.168.119.103:16021 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.119.103:16021 192.168.119.201:63054 ESTAB 0 0 192.168.119.103:16021 192.168.119.201:62894 ESTAB 0 0 192.168.119.103:16021 192.168.119.201:63055 ESTAB 0 0 192.168.119.103:16021 192.168.119.201:2274 ESTAB 0 0 192.168.119.103:16021 192.168.119.201:44784 ESTAB 0 0 192.168.119.103:16021 192.168.119.201:7233 ESTAB 0 0 192.168.119.103:16021 192.168.119.103:58660 ESTAB 0 0 192.168.119.103:16021 192.168.119.201:44822 ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56737 ESTAB 0 0 192.168.119.103:16021 10.2.1.206:57487 ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56736 ESTAB 0 0 192.168.119.103:16021 10.2.1.206:64652 ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56586 ESTAB 0 0 192.168.119.103:16021 10.2.1.206:64653 ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56587 [root@localhost ~]# 实例13:将本地或者远程端口和一个数比较 命令: 代码如下: ss dport OP PORT ss sport OP PORT 输出: 代码如下: [root@localhost ~]# ss sport = :http [root@localhost ~]# ss dport = :http [root@localhost ~]# ss dport \》 :1024 [root@localhost ~]# ss sport \》 :1024 [root@localhost ~]# ss sport \《 :32000 [root@localhost ~]# ss sport eq :22 [root@localhost ~]# ss dport != :22 [root@localhost ~]# ss state connected sport = :http [root@localhost ~]# ss \( sport = :http or sport = :https \) [root@localhost ~]# ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24 说明: ss dport OP PORT 远程端口和一个数比较;ss sport OP PORT 本地端口和一个数比较。 OP 可以代表以下任意一个: 《= or le : 小于或等于端口号 》= or ge : 大于或等于端口号 == or eq : 等于端口号 != or ne : 不等于端口号 《 or gt : 小于端口号 》 or lt : 大于端口号 实例14:ss 和 netstat 效率对比 命令: 代码如下: time netstat -at time ss 输出: 代码如下: [root@localhost ~]# time ss real 0m0.739s user 0m0.019s sys 0m0.013s [root@localhost ~]# [root@localhost ~]# time netstat -at real 2m45.907s user 0m0.063s sys 0m0.067s [root@localhost ~]# 说明: 用time 命令分别获取通过netstat和ss命令获取程序和概要占用资源所使用的时间。在服务器连接数比较多的时候,netstat的效率完全没法和ss比。
❺ 在python中使用socket命令是要下载这个库吗还是直接import socket
是的需要下载sql这个库的不可以直接使用。
❻ 怎样使用socket进行双向通信
下载完成后,软件是一个单独的运行程序,可以直接打开软件。
3
软件的界面很简单,在左侧有tcp和udp的客户端或服务端的快捷按钮,上方有【创建】【删除】【退出】等选项按钮。
4
我们先来建立TCP的测试服务端。点击【TCP Server】再点击【创建】。
选择一个监听端口,这里我们使用6001作为服务端的监听端口。
建立完成后,服务端会自动启动,软件会显示【启动监听】的状态。
我们可以检测一下本机的6001端口是否已经打开。在DOS窗口中输入命令【netstat -a】,可以在列表中看到本机的6001端口的状态为listening的状态,表示本机的6001端口正处于监听的状态。
在DOS窗口中输入命令【telnet 192.168.0.140 6001】来登录本地的6001端口。
点击回车键,就可以成功登录6001端口。在测试软件中就可以看到状态是已连接的状态,同时也可以看到对方的ip就是本地ip。
再来测试通信情况,在DOS窗口中输入a、b、c,在软件的接收窗口就可以看到收到的数据了。
在软件的发送窗口中输入1234567890,点击发送后,在DOS窗口中就可以看到软件发送过来的数据了。
测试完成后,在软件中点击【停止监听】,同时在DOS窗口中可以看到【失去了跟主机的连接】,表示测试连接已经断开。
再来创建TCP的客户端,点击【TCP Client】再点击【创建】。会弹出【创建socket客户端】窗口,输入对方的ip和对方的端口,点击确认。
tcp的客户端已经建立好,如果对方的端口监听正常的话,点击【连接】就可以连接到对方的端口和对方进行测试通信了。
❼ BC95中socket有什么用
发送UDP消息:
1、UDP需要先建立Socket再发送数据,即AT+NSOCR命令创建Socket后,再用AT+NSOST命令发
送数据。
执行AT+NSOCR=<type>,<protocol>,<listen port>[,<receive control>]命令创建Socket。
<type>Socket类型。目前支持DGRAM
<protocol>标准互联网协议定义。目前支持17
<listen port>本地端口号,发送和接收UDP消息,范围是0-65535
<receive control>1表示接收UDP消息,0表示忽略UDP信息。默认值为1
执行AT+NSOST=<socket>,<remote_addr>,<remote_port>,<length>,<data>命令发送UDP信息。
<socket>执行AT+NSOCR命令返回的Socket
<remote_addr>IPv4,点分十进制记法表示的IP地址
<remote_port>远程端口,用于接收UDP消息,范围是0-65535
<length>发送的十进制数据长度
<data>接收的十六进制数据
从B656SP2版本开始,创建Socket时<listen port>不能设置为5683,否则报错。
发送CoAP消息
1、CoAP不用先建立连接,设置CDP服务器后,可直接发送数据,前提是模块IMEI已在NB-IoT网络中注册了。
2、AT+NCDP=<ip_addr>,<port>这条命令可设置服务器的IP地址,支持设置外网的服务器地址(前提是你部署的网络能和这个服务器连接),端口取决于服务器设置的监控端口,默认是5683。
常见问题答疑
1、Q:BC95低功耗运行时,是否能一直与服务器保持连接状态,服务器发送的数据是否能保证接收到?
A:BC95处于深度睡眠模式时将与服务器断开连接,网络侧不能寻呼到设备,必须等待设备主动发起连接。
2、Q:+NSONMI:0,4这条指令是由模块自动输出以通知MCU,还是MCU主动发送查询?
A: 此指令是模块收到下行UDP数据上报的URC,第一个参数表示Socket,第二个参数表示收到的数据长度,是否自动输出可由AT+NSOCR=DGRAM,17,4587,1的最后一个参数控制,具体可参考Quectel_BC95_AT_Commands_Manual
3、Q:BC95有三种网络连接模式:Connected、Idle和PSM。这三种模式的进入和退出是由BC95自己控制还是由连接设备控制?
A:BC95由定时器自我控制,该定时器数值由网络侧设定;不论模块处于Idle还是PSM模式,连接设备总是可以激活通信功能的。
❽ C语言 socket编程 客户端只send一次 但是服务器会循环执行这条命令 在线等
recv(comm_socket,recv_buff, sizeof(recv_buff), 0); /*receiveclient's command*/
改成
int ret = recv(comm_socket,recv_buff, sizeof(recv_buff), 0); /*receiveclient's command*/
if ret == -1 || ret == 0
break
== -1 表示出错, =0 表示 socket 已经关闭。
❾ socket好像只能传输字符串,但是项目中会有复杂的命令,这怎么办
SOCKET并不是只能传输字符串,SOCKET其实根本不知道你要传输的是什么。SOCKET是把所有数据(字符串也好,数据也好)都当作字节流来传输,它是不会也不需要知道传输的数据是什么类型的。所以说,不管你要传输什么,都应该是把它按作固定的格式,写成一个数据包(BYTE数组),然后SOCKET会把这个数据包以字节流的形式发送,然后收到后再按这个格式去解析就行了。