python 网络编程
一、网络基础
互联网协议按照功能不同分为osi七层或者ip/tcp五层,ip/tcp四层。

数据链路层:有个以太网协议,ethernet,一组电信号称为一个数据报,也叫帧。ethernet规定接入internet的计算机都必须有网卡,发送端和接收端的地址就是网卡地址,也就是MAC地址。
网路层:规定网络地址的协议叫做ip协议,它定义的地址叫做ip地址。
传输层:tcp/udp协议

二 socket
socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
1.套接字的两个种族
(1) AF_UNIX,基于文件类型。很少用
(2) AF_INET,基于网络类型。 AF,代表 Address Family,地址族。
Server端
import socket
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',8080)) #绑定
server.listen(5) #监听
while True: #连接循环
conn,ip_port=server.accept() #创建client与server端的连接
print('conn',conn)
print('ip_port',ip_port)
while True: #通信循环
try: #异常处理,client端突然断开
date=conn.recv(1024) #接收
if not date:break #这行代码是针对linux,在linu中如果client突然断开,conn.recv由阻塞状态变为不阻塞状态,一直接收 空。
print(date)
conn.send(date.upper()) #发送
except Exception:
break
conn.close()
server.close()
Client端
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1',8080))
while True: #通信循环
cmd=input('==>')
if not cmd:continue #判定不能为空,为空,实际上client端没有被操作系统发出数据,空 操作系统就不会发出。
client.send(bytes(cmd,encoding='utf-8'))
date=client.recv(1024)
print(date.decode('utf-8'))
浙公网安备 33010602011771号