python中的网络1
1.认识IP地址
Ip地址是用来唯一标识一台电脑主机的,好比我们的手机号。IP地址包括IPV4,IPV6,后者是对前者地址不够的补充。同时IP地址又主要分为主机IP和私有IP,主机IP都是127.0.0.1,私有IP有三种:192.168.xx.xx 172.16.xx.xx 10.0.xx.xx。
私有IP是进行局域网通信的时候网络选出的一个
随机可用IP地址分配给电脑。
2.认识端口
端口是主机分配不同应用的用于收发数据通道(进行数据收发)
端口号:0-65535.知名端口号:0-1023,剩余为动态端口号。
3.python中的通信
通过IP地址找到目的主机,通过端口号找到对应应用进行数据的收发的过程!
4.几个常用命令
netstat -an : 查看端口的使用状态
lsof -i [tcp/udp]:端口号 -> 根据端口号查找对应的应用程序, 提示:如果查看是其它用户应用程序的端口号需要加上sudo, 比如:sudo lsof -i:端口号
kill -9 进程编号->根据进程编号强制杀死指定进程
5.socket: 翻译成中文是套接字,进程之间通信的工具, 数据的发送和接收都是通过socket来完成,socket可以理解成数据的搬运工
lsof -i [tcp/udp]:端口号 -> 根据端口号查找对应的应用程序, 提示:如果查看是其它用户应用程序的端口号需要加上sudo, 比如:sudo lsof -i:端口号
kill -9 进程编号->根据进程编号强制杀死指定进程
5.socket: 翻译成中文是套接字,进程之间通信的工具, 数据的发送和接收都是通过socket来完成,socket可以理解成数据的搬运工
udp协议下socket通信:
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # IPV4,udp绑定 adr = ('192.168.196.1', 8989) send_data = '哈哈' udp_socket.sendto(send_data.encode(encoding='gbk', errors="strict"), adr) # 数据发送 time.sleep(2) all_data = udp_socket.recvfrom(1024) data, ip_port = udp_socket.recvfrom(1024) # 元组拆包输出 # 数据接收 real_data = data.decode('gbk') print(all_data) print(real_data, ip_port) udp_socket.close()
tcp协议下socket通信:
服务器:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # IPV4,tcp绑定 server_socket.bind(('', 9090)) # 端口绑定 server_socket.listen(128) # 监听服务端输入,使套接字变为被动连接 while True: real_server_socket, id_port = server_socket.accept() # 等待客户端连接 file_name = real_server_socket.recv(1024) # 数据接收 real_name = file_name.decode('utf-8') if os.path.exists(real_name): with open(real_name, 'rb') as file: while True: data = file.read(1024) if len(data) > 0: real_server_socket.send(data) # 数据发送 else: break real_server_socket.close()
客户端:
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # IPV4,tcp绑定 client_socket.connect(('192.168.128.65', 9090)) # 连接服务器 file_name = input('请输入文件名:') client_socket.send(file_name.encode('utf-8')) # 发送数据 # 接受数据 all_data = b'' while True: data = client_socket.recv(1024) # 接收数据 if data: all_data += data else: break if len(all_data) == 0: print('文件不存在!') else: with open('/home/python/Desktop/' + file_name, 'wb') as file: file.write(all_data) client_socket.close()
socket通信流程: