1. 网络基础知识
IP地址:32位二进制数字,常见的形式是192.168.0.X它的作用是在网络中定位到一个计算机
局域网使用的IP地址:192.168.0.0-192.168.255.255
172.16.0.0-172.31.255.255
10.0.0.0-10.255.255.255
特殊的IP地址:127.X.X.X 127.0.0.1本机
- X.X.X 多播地址,目标是局域网内特定的一组对象
其他的IP可以认为是互联网IP
端口地址:16位二进制数字,它的作用是在计算机中定位到一个联网的程序
编程需要的地址是:IP+端口
TCP通信:类似于打电话,只有接通了才能发数据,数据发完了还要断开连接,网络上大多数通信都是TCP
UDP通信:类似于发短信,需要就发,不用连接,不保证数据一定能送到,适用于要求速度,不要求精度的场合,例如网络电话,在线视频
2. Socket简介
Python 提供了两个级别访问的网络服务。:
- 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
- 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
Socket函数
Python 中,我们用 socket()函数来创建套接字,语法格式如下:
socket.socket([family[, type[, proto]]])
参数:
- family: 套接字家族可以使AF_UNIX或者AF_INET
- type: 套接字类型可以根据是面向连接的还是非连接分为
SOCK_STREAM
或SOCK_DGRAM
- protocol: 一般不填默认为0.
socket对象(内建)方法
3. python Internet模块
以下列出了 Python 网络编程的一些重要模块:
4. 练习一:TCP编程
客户端(发起连接)----------------------------------------------------------服务器(接受连接,提供服务)
客户端
#TCP客户端
#demo5.py 服务器ip127.0.0.1 服务器端口6666
import socket
import sys
s=socket.socket()
ip=sys.argv[1]
port=int(sys.argv[2])
s.connect((ip,port)) #连服务器
while 1:
sdata=input("客户端:")
s.send(sdata.encode())
if sdata=="exit":
break
rdata=s.recv(1024).decode()
print(f"服务器:{rdata}")
s.close()
服务端
#TCP服务器
import socket
s=socket.socket()
s.bind(("0.0.0.0",6666)) #绑定地址
s.listen(5) #监听数量 开启监听
sock,addr=s.accept() #接收连接
while 1:
rdata=sock.recv(1024).decode()
print(f"客户端:{rdata}")
if rdata=="exit":
break
sdata=input("服务器:")
sock.send(sdata.encode())
sock.close() #关闭通信管道
s.close() #关闭监听管道
exit必须客户端进行才有用
5. 练习二:UDP编程
服务端
#UDP服务器
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('0.0.0.0',9999))
print("服务器已启动")
while 1:
rdata,addr=s.recvfrom(1024)
print(f"客户端{addr}:{rdata.decode()}")
if rdata==b"exit":
break
sdata=input("服务器:")
s.sendto(sdata.encode(),addr)
s.close()
客户端
#UDP客户端
import socket
import sys
ip=sys.argv[1]
port=int(sys.argv[2])
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
print("客户端已启动")
while 1:
sdata=input("客户端:")
s.sendto(sdata.encode(),(ip,port))
if sdata=="exit":
break
rdata=s.recv(1024)
print("服务器:",rdata.decode())
s.close()
在两个电脑在同一局域网时,可以进行连接
LKmnbZ 发布了46 篇原创文章 · 获赞 58 · 访问量 2123 私信 关注