python笔记 3-4网络通讯服务 linux上服务搭建 vim udp socket

day3 网络通讯服务 linux上服务搭建 linux基本操作

FTP服务 FTP 文件传输协议
服务端安装vsftpd
命令:sudo apt-get install vsftpd

ssh服务
SSH 安全协议,常用于远程登录
服务端:sudo apt-get install openssh-server
客户端登录命令:ssh 服务器用户名@服务器ip地址
使用ssh访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh 尝试删除该文件解决。
scp指令文件传输
下载
scp 服务器用户名@服务器ip地址:/home/teacher/test.py ./test.py
下载文件夹
scp -r 服务器用户名@服务器ip地址:/home/teacher/test.py ./test.py
上传
scp ./test.py 服务器用户名@服务器ip地址:/home/teacher/test.py
软件的安装与卸载
常见的安装方式
源代码方式(tarball)方式
特点:稳定,但比较繁琐
deb包方式
特点:安装简单,但无法解决包之间依赖问题
apt-get方式
特点:常见方式,安装简单,能解决包的依赖问题
更新Ubuntu 镜像源为清华大学开源站
1,备份 /etc/apt/sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
2,编辑sources.list内容
从 清华大学开源站 复制过来
注意要使用sudo 否则提示没有权限保存
3,保存文件
4,更新镜像源
sudo apt-get update
vim编辑器
vi的三种模式
命令模式
打开文件,默认进入的就是该模式
进入插入模式
a\A\i\I\o\O
末行模式输入 “:”
退出esc
末行模式进入 :
退出esc :wq 保存退出 q退出
vim 命令模式

vim是vi的一个功能增强版
网络通信概述
网络就是把双方或者多方的设备(电脑, 智能手机,iPad)连接起来的一个工具
学习网络的目的: 通过网络完成不同电脑之间运行软件(进程)的数据的通信,数据从一方传递到另外一方,完成数据的共享。
IP地址ip地址就是标识网络中唯一的一台设备(电脑, 智能手机,iPad), ip地址不会重复
ip地址分类
ipv4 点分十进制 192.168.74.75
ipv6 16进制数据, 号称给世界上每一粒沙子分配一个唯一不同的ip地址
ip地址作用
ip地址的作用通过ip地址找到对应的设备,然后给设备发送数据
ip地址构成:网络地址-主机地址

A, B, C, D, E 五类地址, 其中C类地址是最常用的ip地址
C类地址的特点: 前三位不变, 最后一个发生变化,它范围是2的8次方,但是0,255 不能使用也就是可用是254ip地址
B类地址的特点: 前二位不变,后两位发送变化, 它的范围是2的16次方-2
A类地址的特点: 第一位不变,后面三位发送编码, 他的范围是2的24次方-2
私有IP
私有ip就是在局域网中使用的ip地址 一般由 192.168.xxx.xxx 172.16.xxx.xxx 10.xxx.xxx.x
本机IP
127.0.0.1 : 本地回环或者本地环回 本机域名: localhost
有域名是方便大家使用和记住某台电脑的访问地址, 域名和ip地址是一一对应的
IP地址查看
linux
ifconfig指令
查看网卡信息
windows
ipconfig
ping
检查网络主机是否在线
ping 127.0.0.1 如果能够ping通说明你电脑的网卡没有问题
ping www.baidu.com 如果能够ping通说明可以上网
ping 192.168.74.76 如果能够ping通说明网络连接没有问题,可以进行通信
端口
基本概念及分类
端口就是数据传入或者传出的一个入口,或者理解成现实生活中教室的大门
端口号: 使用唯一不同的编号来标识一个端口, 端口号不能重复
知名端口: 也可以称为固定端口,是系统所需要使用的端口号 范围 0-1023
动态端口: 程序员可以给程序设置的端口, 范围 1024-65535, 提示: 如果程序员不给程序设置端口那么系统会给程序默认在动态端口范围内找一个空闲的端口进行设置,当然程序员还可以自己设置程序的端口
端口号查看
netstat -an
查看所有端口占用情况 sudo lsof -i[tcp/udp]:端口号
根据端口号找到所使用端口号应用程序
kill pid(进程的编号): 杀死指定进程编号的进程
kill -9 pid(进程的编号): 强制杀死指定进程的编号的进程
socket (重点)
翻译成中文是套接字, 也可以称为一个插座, 比如: 电脑A想要通过飞秋发送数据,首先需要准备一个插座(socket),然后数据通过这个插座发送出去,对方电脑需要准备一个插座(socket)来接收我发送的数据
socket是可以完成不同电脑运行软件数据的通信工具,可以理解成是数据的搬运工。socket是不同电脑进程之间通信的工具, 数据的传递都是需要这个socket的。

day4 网络通信之 UDP VS TCP
编码转换
str–>bytes 字符串转换2进制 称为编码
encode
encode(encoding=”字符集”, errors=”模式”)
bytes–>str 2进制转换 字符串 称为解码
decode
decode(encoding=”字符集”, errors=”模式”)
为防止编码转码失败导致错误,可以加上 errors参数

encoding= 编码解码方式 errors= 可选参数 默认 strict (erroes错误处理,不至于报错)
UPD 简单的聊天器

udp绑定端口问题
bind() 可以绑定端口
bind((“192.168.31.163”, 7788)) 绑定 192.168.31.162 的 7788端口
bind((“”,7788) 绑定本机所有IP的7788端口 无参数默认本机
tcp简介TCP传输协议
tcp是传输控制协议,能保证数据的准确性和有效性。
tcp是面向连接的,在发送数据之前需要和对方建立连接,那么间接验证对方的ip地址有效性
tcp的通信过程,首先要先建立连接,然后才能发送和接收数据,最后关闭连接
tcp可以发送大量数据。
tcp不适合做广播的,比如: 文件上传和下载, 多数应用程序都是使用tcp
tcp的传输速度没有udp传输速度快,因为udp不需要建立连接。
UDP传输协议
udp是用户数据报协议(User Datagram Protocol)
udp发送数据不需要建立连接
udp不能保证数据的准确性和有效性
udp只能发送少量数据,每个数据包最大64KB
udp适合做广播,比如飞秋上线操作, 广播地址: 255.255.255.255, qq视频用udp
udp主要用在广播和视频传输等方面,其它方面多数都是用tcp协议
tcp的特点(面试容易问到)
面向连接, 在发送数据之前需要建立连接,间接验证对方ip地址的有效性
可靠的传输(4小点)
1 应答机制,对方收到消息底层会回复,udp没有
2 超时重传,比如给对方发送了一个数据,对方一直没有回复,那么会隔一段时间再次发送这个数据,如果对方一直没有回复,那么会认为对方掉线了。
3 错误校验, 如果接收的数据,数据包序号发送了错乱,tcp会自动进行排序,保证数据的有序性, 数据包如果重复会删除重复的数据包,udp没有
4 流量控制,tcp有流量控制,数据发送在网卡缓存区达到一定上限,对方不会一直发送数据,需要等接收方开始接收数据的时候,等没有达到上限的时候再次让对方发送的数据,保证数据在网卡缓存区不会超出。udp没有,如果对方使用循环一直发送数据的那么电脑会卡死
tcp 和 udp的不同的
1 tcp是面向连接的,发送数据之前需要建立连接,间接验证对方ip地址的有效性,udp直接发送数据, 不需要建立连接
2 tcp有应答机制,收到数据底层会进行回复,udp收到数据不好自动回复。
3 tcp能保证数据的准确性和有效性,udp保证不了
4 tcp有超时重传,udp没有
5 tcp有流量控制,udp没有
6 tcp需要建立连接需要额外的系统资源,而udp不需要建立连接,不需要额外的连接资源, upd比tcp要节省资源
7 tcp的传输速度没有udp的传输速度快,因为udp不需要建立连接直接就发送数据了。
8 udp适合做广播功能,tcp不适合做广播
tcp客户端使用步骤
导入socket模块
import socket
创建socket套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
建立连接
tcp_client_socket.connect((“192.168.31.221”, 8080))
发送数据
tcp_client_socket.send(“hello world!”.encode())
关闭socket套接字
tcp_client_socket.close()
tcp服务器端使用步骤
导入socket模块
import socket
创建socket套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
绑定端口
tcp_server_socket.bind((“”, 8081))
设置服务器套接字为被动监听模式
tcp_server_socket.listen(128)
接受客户端连接
new_client_socket, ip_port = tcp_server_socket.accept()
接收客户端发送的数据
recv_data = new_client_socket.recv(1024)
关闭和当前客户端的连接
new_client_socket.close()
服务器端不再接受新的客户端连接
tcp_server_socket.close()
TCp 服务器和客户端通信代码 代码

1、导入模块 socket

import socket

2、创建套接字 TCP

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3、绑定端口和ip

tcp_server_socket.bind((“”, 8080))

4、开启监听,并且设置允许的最大连接数

listen() 开启监听,128表示的是最大允许连接128个客户端

另外一个作用,把套接字 tcp_server_socket 由主动模式设置为被动连接

tcp_server_socket.listen(128)

5、等待客户端连接

此处的while True 的作用是接收多个客户端连接

while True:
# accept() 作用是用来接受客户端连接
new_client_socket, client_ip_port = tcp_server_socket.accept()
print(“[新客户端来了]”, client_ip_port)
# print(recv_data[0]) # socket 一个专门服务当前已经连接的看、客户端的socket new_client_socket
# print(recv_data[1]) # 客户端的ip和端口

# 此处的 while True 表示可以接收多少条数据
while True:
    # 6、开始数据收发
    recv1 = new_client_socket.recv(1024)
    # 如果 recv1 接收到的数据为空,表示客户端可能已经下线
    # if len(recv1) != 0:
    if recv1:
        # 解码
        re_text = recv1.decode("gbk")
        print("[新消息来了]", client_ip_port, ":", re_text)

        # 收到信息后,回复收到
        new_client_socket.send("收到".encode())
    else:
        print("客户端可能已经下线!")
        break
# 关闭和当前客户端的通信的连接
new_client_socket.close()

7、关闭连接, tcp_server_socket.close() 表示服务端不在接收新的客户端连接,(老客户端可以继续服务)

tcp_server_socket.close()

猜你喜欢

转载自blog.csdn.net/qq_42377379/article/details/82081096
今日推荐