socket模块

描述

给我们提供了一个模拟控制OSI七层协议的方法,快让我们可以基于网络编写一个进行数据交互的程序
socket也叫套接字
    基于文件类型的套接字家族(单机)
  	    AF_UNIX
    基于网络类型的套接字家族(联网)
  	    AF_INET

代码简介

服务端

import socket


# 1.产生一个socket对象并指定采用的通信版本和协议(TCP)
server = socket.socket()  # 括号内不写参数 默认就是TCP协议  family=AF_INET基于网络的套接字 type=SOCK_STREAM流式协议即TCP
# 2.绑定一个固定的地址(服务端必备的条件)
server.bind(('127.0.0.1', 8080))  # 127.0.0.1为本地回环地址 只有自己的电脑可以访问
# 3.设立半连接池(暂且忽略)
server.listen(5)
# 4.等待接客
sock, addr = server.accept()  # return sock, addr  三次握手
print(sock, addr)  # sock就是双向通道 addr就是客户端地址
# 5.服务客人
data = sock.recv(1024)  # 接收客户端发送过来的消息 1024字节
print(data.decode('utf8'))
# 给客户端发送消息 基于网络发送的消息必须是bytes类型
sock.send('尊敬的客人 您说什么就是什么 一切按照您的要求来'.encode('utf8'))  
# 6.关闭双向通道
sock.close()  # 四次挥手
# 7.关闭服务端
server.close()  # 店倒闭了

客户端

import socket

# 1.生成socket对象指定类型和协议
client = socket.socket()
# 2.通过服务端的地址链接服务端
client.connect(('127.0.0.1', 8080))
# 3.直接给服务端发送消息
client.send('大爷有钱 把你们店最好的给我叫出来'.encode('utf8'))
# 4.接收服务端发送过来的消息
data = client.recv(1024)
print(data.decode('utf8'))
# 5.断开与服务端的链接
client.close()

代码优化

需求:
    1.聊天内容自定义
    2.让聊天循环起来
    3.用户发送的消息不能为空
    4.服务端多次重启可能会报错
    5.客户端异常断开时如何让服务端继续服务其他客户端

服务端:
import socket

server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)
while True:
    sock, addr = server.accept()
    while True:
        try:
            data = sock.recv(1024)
            print(f'收到来自{addr}的消息:', data.decode('utf8'))
            msg = input('').strip()
            sock.send(f'回复:{msg}'.encode('utf8'))
        except BaseException:
            break
            
客户端:          
import socket

client = socket.socket()
client.connect(('127.0.0.1', 8080))
while True:
    msg = input('请输入您想要发送给服务端的消息>>>:').strip()
    if len(msg) == 0:
        print('不能发送空消息')
        continue
    client.send(msg.encode('utf8'))
    data = client.recv(1024)
    print('来自于服务端发送过来的消息>>>:', data.decode('utf8'))

半连接池

server.listen(5)
当有多个客户端来链接的情况下 我们可以设置等待数量(不考虑并发问题的情况下)
假设服务端只有一个人的情况下

在测试半连接池的时候 可以不用input获取消息 直接把消息写死即可 
posted on 2023-04-06 19:14  zyg111  阅读(55)  评论(0)    收藏  举报