一、socketServer
import FileManager
# 1.什么是socket
"""
socket又叫套接字,指的是实现通信的两个端。
套接字分为服务器套接字和客户端套接字两种。 服务器套接字会绑定一个固定的ip然后等待客户端来连接它,正常情况下一个服务器是可以同时和多个客户端保持连接的;客户端套接字不需要绑定IP,在需要的时候主动连接服务器套接字。
"""
# 2.socket编程
"""
用代码实现能够通信的服务器和客服端。
python中提供了一个模块叫socket专门用来支持socket编程的
"""
# 3.服务器套接字
from socket import socket
def main():
""""""
# 1.创建套接字对象(买电话机)
"""
socket(family, type) - 创建套接字对象
family - ip地址类型:AF_INET(ipv4)、AF_INET6(ipv6)
type - 传输协议类型: SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)
"""
server = socket()
# 2.绑定IP和端口(插电话线)
"""
套接字对象.bind((ip地址,端口号))
ip地址 - 字符串,运行当前服务器程序的计算机的ip地址(10.7.190.131)
端口号 - 整数, 范围是0~65535,其中0~1024是著名端口(同一时间同一台计算机不能同时使用相同的端口)。端口就是用来区分同一台计算机上不同服务(程序)
"""
server.bind(('10.7.190.131', 12344))
# 3.监听请求
# server.listen(最大通信的数量)
server.listen(200)
# 4.等待客户端的连接
while True:
print('等待...')
# 5.接受客户端的请求(接电话) - 这句代码会阻塞线程,直到有客户端的请求才会执行
connect, address = server.accept()
# print(type(connect), type(server))
print('建立连接成功!', address)
# 6.接受消息(别人说我听)
# connect.recv(一次性能够接受的最大的字节数) - 返回值就是接收到的数据
re_data = connect.recv(1024)
print(type(re_data), re_data.decode())
# 7.发送消息(我说别人听)
# 发送网页
# m = FileManager.read_text_file('test.html')
# message = 'HTTP/1.1 200 OK\r\n\r\n '+m
# connect.send(message.encode())
# 发送文字消息
message = input('>>>')
connect.send(message.encode())
# 8.关闭连接
connect.close()
if __name__ == '__main__':
main()
二、socketClient
from socket import socket
# 1.创建套接字对象
client = socket()
# 2.向服务器发送请求(打电话)
client.connect(('10.7.190.131', 12344))
# 3.发送消息
message = input('>>>')
client.send(message.encode(encoding='utf-8'))
# 4.接收消息
re_data = client.recv(1028)
print(re_data.decode(encoding='utf-8'))
三、持续聊天的服务器
rom socket import socket
server = socket()
server.bind(('10.7.190.131', 12344))
server.listen(100)
while True:
print('等待....')
conection, address = server.accept()
while True:
message = input('自己:')
conection.send(message.encode(encoding='utf-8'))
if message in ['拜拜', '再见']:
conection.close()
break
re_message = conection.recv(1024).decode(encoding='utf-8')
print(f'{address[0]}:{re_message}')
if re_message in ['拜拜', '再见']:
conection.close()
break
四、持续聊天客户端
from socket import socket
client = socket()
client.connect(('10.7.190.131', 12344))
while True:
re_message = client.recv(1024).decode(encoding='utf-8')
print(f'10.7.190.131:{re_message}')
if re_message in ['拜拜', '再见']:
client.close()
break
message = input('>>>')
client.send(message.encode(encoding='utf-8'))
if message in ['拜拜', '再见']:
client.close()
break
五、发送图片的服务器
from socket import socket
server = socket()
server.bind(('10.7.190.131', 12346))
server.listen(100)
while True:
print('等待....')
conection, address = server.accept()
# 发送图片
with open('files/QQ20200826-3.png', 'rb') as f:
image_content = f.read()
# 发送文件前需要先发送文件大小
length = str(len(image_content))
conection.send(length.encode(encoding='utf-8'))
# 发送文件数据
conection.send(image_content)
六、接受图片的客户端
from socket import socket
server = socket()
server.bind(('10.7.190.131', 12346))
server.listen(100)
while True:
print('等待....')
conection, address = server.accept()
# 发送图片
with open('files/QQ20200826-3.png', 'rb') as f:
image_content = f.read()
# 发送文件前需要先发送文件大小
length = str(len(image_content))
conection.send(length.encode(encoding='utf-8'))
# 发送文件数据
conection.send(image_content)