携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
也是暑假自学python的第17天
今天开始学习Python高级中的网络通信
网络通信
IP地址
私有IP:为我们自己的局域网使用,不在公网中使用,其范围为:
10.0.0.0~10.255.255.255
172.16.0.0~172.16.255.255
192.168.0.0~192.168.255.255
注:IP为127.0.0.1~127.255.255.255用于回路测试
知名端口:
80端口:HTTP服务
21端口:FTP服务
22端口:ssh
443端口:https
动态端口:1024-65535.动态分配是指当一个系统程序或应用程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个给其使用。
使用netstat -an查看端口状态
例如使用netstat -an|grep tcp来查看tcp端口状态:
Socket套接字
Socket是进程通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间进程的通信,我们在网络上各种各样的服务大多基于Socket来完成通信。
udp网络通信:
客户端
首先进行创建:(第一个参数代表IPV4,第二个参数表示使用UDP进行通信)
import socket
#第一个参数代表IPV4,第二个参数表示使用UDP进行通信
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
客户端的全部代码:
import socket
import sys
#socket.AF_INET代表ipv4, socket.SOCK_DGRAM代表udp
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
dest_addr=('192.168.1',2000)
client.sendto('helloworld'.encode('utf8'),dest_addr)
recv_data=client.recvfrom(50)
print(recv_data[0].decode('utf8'))
client.close()
服务器端:
from socket import *
import sys
# 1. 创建套接字
udp_server = socket(AF_INET, SOCK_DGRAM)
# 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
local_addr = (sys.argv[1], 2000) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
udp_server.bind(local_addr)
# 3. 等待接收对方发送的数据,1024表示本次接收的最大字节数
recv_data=udp_server.recvfrom(5)
# 4. 显示接收到的数据
print(recv_data[0].decode('utf8'))
#这里是对方的ip地址和端口号
print(recv_data[1])
# 5. 给客户端发一个world
udp_server.sendto('Ilovepython'.encode('utf8'),recv_data[1])
udp_server.close()
===============================================================