网络命令
Ping 命令
检测网络是否连通
使用方法: ping -c 次数 网址
ping -c 3 www.baidu.com
netstat 命令
netstat 是一个用来查看网络状态的重要工具.
语法:netstat [选项]
功能:查看网络状态
常用选项:
- n 拒绝显示别名,能显示数字的全部转化成数字
- l 仅列出有在 Listen (监听) 的服务状态
- p 显示建立相关链接的程序名(pid)
- t (tcp)仅显示 tcp 相关选项
- u (udp)仅显示 udp 相关选项
- a (all)显示所有选项,默认不显示 LISTEN 相关
// 每个 1s 执行一次 netstat -nltp
$ watch -n 1 netstat -nltp
n 指的是次数 1指的是间隔(s)
pidof 命令
在查看服务器的进程 id 时非常方便.
语法:pidof [进程名]
功能:通过进程名, 查看进程 id
pidof tcp_server
2958285
pidof udp_server | xargs kill -9 //杀掉进程
V1 版本 - echo server
简单的回显服务器和客户端代码
备注: 代码中会用到 地址转换函数 .
网络信息sockaddr
struct sockaddr_in local; bzero(&local, sizeof(local));//先置零 local.sin_family = AF_INET; local.sin_port = ::htons(_port); // 要被发送给对方的,即要发到网络中! // local.sin_addr.s_addr = ::inet_addr(_ip.c_str()); // 服务器ip不用绑定 1. string ip->4bytes 2. network order //TODO local.sin_addr.s_addr = INADDR_ANY;
IP地址转换
inet_addr
函数会自动将点分十进制的 IPv4 地址(如 "192.168.1.1")转换为网络字节序(大端序),无论当前机器使用的是大端还是小端字节序。
inet_ntop
函数会将网络字节序(大端序)的二进制 IP 地址转换为文本格式(如点分十进制的 IPv4 或冒号分隔的 IPv6),这个过程中会自动适配当前机器的字节序。
服务器
云服务器不允许直接 bind 公有 IP,我们也不推荐编写服务器的时候,bind 明确 的 IP,推荐直接写成 INADDR_ANY,因为一个服务器可能有多个IP地址
在网络编程中,当一个进程需要绑定一个网络端口以进行通信时,可以使用 INADDR_ANY 作为 IP 地址参数。这样做意味着该端口可以接受来自任何 IP 地址的连 接请求,无论是本地主机还是远程主机。例如,如果服务器有多个网卡(每个网卡上 有不同的 IP 地址),使用 INADDR_ANY 可以省去确定数据是从服务器上具体哪个网 卡/IP 地址上面获取的。
提示:我们买的云服务器的端口需要在官网防火墙打开,才能使用
客户端
client 端要不要显示 bind
如果client显示的bind端口号 ,不同公司间的client bind的端口号有可能重复 ,导致bind失败 ,所以交给OS自动bind
创建socket
bind
接收信息
发消息
sockfd 是全双工 (一个时刻 通信双方能够同时进行双向数据传输)
代码实现