day18-- 总结 网络编程
套接字
- 1.什么是socket编程
socket又叫套接字,指的是实现通信的两个端;
这两个端又分为服务器套接字和客户端套接字
(通信是双向的,连接是单向的)
服务器
- 2.服务器套接字
python中提供了一个socket模块来支持socket编程
1)创建套接字对象(买电话机)
server = socket.socket()
2)绑定ip和端口
bind((ip地址, 端口号))
ip地址 - 字符串;服务器运行在那台计算机及上,ip地址就写那台计算机的ip
端口号 - 整型;范围:0-65535,其中0-1024是著名端口,有特殊意义,一般不用
server.bind(('10.7.181.97', 8888))
3)等待连接并且设置同一时间能够接收的请求数量
server.listen(1024)
4)让服务器保持一直运行的状态
while True:
print('开始监听...')
5)接收请求(接电话)
注意:当程序执行到accept()的时候,会停下来,直到有客户端给当前服务器发送请求
connect, address = server.accept()
print('接收请求')
print(connect, address)
while True:
6)接收客户端发送的数据(听别人讲电话)
"""
recv(数据大小) - 接收数据并且设置一次性能够接收的最大数据
补充:二进制转字符串
二进制对象.decode()
str(二进制对象,encoding='utf-8')
"""
recv_data = connect.recv(1024)
print('接收:', recv_data.decode(encoding='utf-8'))
7)给客户端发送数据(说话别人听)
"""
send(数据) - 发送数据,数据的类型必须是bytes(二进制)
"""
send_massage = input('服务器:')
connect.send(send_maassage.encode())
8)关闭连接(挂电话)
connect.close()
客户端
from socket import *
1)创建套接字对象(买电话机)
client = soocket()
2)发送请求(打电话)
# connect((ip地址, 端口号))
client.connect(('10.7.181.97', 8888))
while True:
3)发送消息
send_massage = input('客户端:')
client.send(send_massage.encode())
4)接收消息
re_data = client.recv(1024)
print(re_data.decode(encoding='utf-8'))
client.close()
图片server
from socket import *
server = socket()
server.bind(('10.7.181.97', 7777))
server.listen(1000)
# 让程序一直运行
while True:
print('开始监听...')
connect, address = server.accept()
# 发送图片
with open('files/222.jpg', 'rb') as f:
connect.send(f.read())
connect.close()
图片client
from socket import *
client = socket()
client.connect(('10.7.181.97', 7777))
while True:
re_data = client.recv(1024)
with open('files/new.jpg', 'ab') as f:
f.write(re_data)
if len(re_data) < 1024:
break