socket编程(在线自动聊天工具) --Python3

目录

@

1、服务端只支持一个客户端连接

服务端程序(server.py):

import socket

# 创建服务端socket对象
server = socket.socket()
# 绑定IP(ipocnfig命令查看ip地址)和端口(自定义网络端口,不和系统已有端口冲突就可以使用)
server.bind(('192.168.5.106', 8000))
# 可以等待5个连接
server.listen(5)
# 等待客户端连接,如果没有连接,则持序等待
# conn:客户端与服务端连接的对象,服务端通过该对象进行收发数据
# addr:客户端地址信息
print('服务端已经运行,等待客户端连接……')
conn, addr = server.accept()  # 在这里会阻塞,只有客户端进行连接,才获取客户端连接然后开始进行通行
print('有人来连接了!')
data = conn.recv(1024)  # 1024:服务端获取数据一次最多获取1024byte
print('客户端给我发了:', data)
conn.send(b'May I help you?')
conn.close()  # 与客户端断开连接
server.close()  # 关闭服务端的服务

客户端程序(client.py):

import socket

# 创建客户端socket对象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有连接成功,代码才会继续执行
client.send(b'hello')  # 连接服务端后给服务端发送消息
data = client.recv(1024)  # 等待服务端发送的消息
print('服务端给我回复了:',data)
client.close()  # 关闭连接

服务端运行:

服务端已经运行,等待客户端连接……
有人来连接了!
客户端给我发了: b'hello'

客户端运行:

服务端给我回复了: b'May I help you?'

2、服务端支持多客户端连接

服务端(server.py):

import socket

# 创建服务端socket对象
server = socket.socket()
# 绑定IP和端口
server.bind(('192.168.5.106', 8000))
# 可以等待5个连接
server.listen(5)
# 等待客户端连接,如果没有连接,则持序等待
# conn:客户端与服务端连接的对象,服务端通过该对象进行收发数据
# addr:客户端地址信息
while True:
    print('服务端已经运行,等待客户端连接……')
    conn, addr = server.accept()  # 在这里会阻塞,只有客户端进行连接,才获取客户端连接然后开始进行通行
    print('有人来连接了!')
    data = conn.recv(1024)  # 字节类型
    resp = data + ',你好!'.encode('utf-8')
    print('已发送“', resp.decode('utf-8'), '”给客户端……')
    conn.send(resp)  # 字节类型
    conn.close()
    print('服务端断开连接……', '\n')

客户端程序(client.py):

import socket

# 创建客户端socket对象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有连接成功,代码才会继续执行
name = input('输入你的姓名吧:')
client.send(name.encode('utf-8'))  # 将字符串转换为字节,连接服务端后给服务端发送这个字节
resp = client.recv(1024)  # 阻塞,等待服务端发送的消息
print(resp.decode('utf-8'))
client.close()  # 关闭连接

服务端运行记录:

扫描二维码关注公众号,回复: 6690738 查看本文章

服务端已经运行,等待客户端连接……
有人来连接了!
已发送“ Thanlon,你好! ”给客户端……
服务端断开连接……

服务端已经运行,等待客户端连接……
有人来连接了!
已发送“ Kiku,你好! ”给客户端……
服务端断开连接……

服务端已经运行,等待客户端连接……

客户端1运行记录:

输入你的姓名吧:Thanlon
Thanlon,你好!
客户端1运行:

客户端2运行记录:

输入你的姓名吧:Kiku
Kiku,你好!

3、在线自动聊天工具

服务端程序(server.py):

import socket

# 创建服务端socket对象
server = socket.socket()
# 绑定IP和端口
server.bind(('192.168.5.106', 8000))
# 可以等待5个连接
server.listen(5)
# 等待客户端连接,如果没有连接,则持序等待
# conn:客户端与服务端连接的对象,服务端通过该对象进行收发数据
# addr:客户端地址信息
while True:
    print('\n系统提示:服务端已经运行,等待客户端连接……')
    conn, addr = server.accept()  # 在这里会阻塞,只有客户端进行连接,才获取客户端连接然后开始进行通行
    print('系统提示:' + str(list(addr)) + '客户端已连接本服务端……\n')
    while True:
        data = conn.recv(1024)  # 字节类型
        if data == b'0':
            break
        print('系统提示:已接收客户端发来的信息:“' + data.decode('utf-8') + '”')
        resp = data + ',你好!'.encode('utf-8')
        print('系统提示:已发送“', resp.decode('utf-8'), '”给客户端……')
        conn.send(resp)  # 字节类型
        print('系统提示:与' + str(list(addr)) + '客户端的连接未关闭,可继续和该客户端进行对话……')
    conn.close()
    print('系统提示:与' + str(list(addr)) + '客户端的连接已关闭……')

客户端程序(client.py):

import socket

# 创建客户端socket对象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有连接成功,代码才会继续执行
while True:
    name = input('系统提示,请输入您的姓名(输入0关闭连接):\n')
    client.send(name.encode('utf-8'))  # 将字符串转换为字节,连接服务端后给服务端发送这个字节
    if name == '0':
        break
    resp = client.recv(1024)  # 阻塞,等待服务端发送的消息
    print('系统提示:客户端回复“' + resp.decode('utf-8') + '”')
client.close()  # 关闭连接
print('系统提示:关闭客户端连接!')

服务端运行记录:

系统提示:服务端已经运行,等待客户端连接……
系统提示:['192.168.5.106', 57892]客户端已连接本服务端……

系统提示:已接收客户端发来的信息:“Thnlon”
系统提示:已发送“ Thnlon,你好! ”给客户端……
系统提示:与['192.168.5.106', 57892]客户端的连接未关闭,可继续和该客户端进行对话……
系统提示:已接收客户端发来的信息:“Kiku”
系统提示:已发送“ Kiku,你好! ”给客户端……
系统提示:与['192.168.5.106', 57892]客户端的连接未关闭,可继续和该客户端进行对话……
系统提示:与['192.168.5.106', 57892]客户端的连接已关闭……

系统提示:服务端已经运行,等待客户端连接……
系统提示:['192.168.5.106', 57939]客户端已连接本服务端……

系统提示:已接收客户端发来的信息:“Maria”
系统提示:已发送“ Maria,你好! ”给客户端……
系统提示:与['192.168.5.106', 57939]客户端的连接未关闭,可继续和该客户端进行对话……
系统提示:与['192.168.5.106', 57939]客户端的连接已关闭……

系统提示:服务端已经运行,等待客户端连接……

客户1端运行记录:

系统提示,请输入您的姓名(输入0关闭连接):
Thnlon
系统提示:客户端回复“Thnlon,你好!”
系统提示,请输入您的姓名(输入0关闭连接):
Kiku
系统提示:客户端回复“Kiku,你好!”
系统提示,请输入您的姓名(输入0关闭连接):
0
系统提示:关闭客户端连接!

客户2端运行记录:

系统提示,请输入您的姓名(输入0关闭连接):
Maria
系统提示:客户端回复“Maria,你好!”
系统提示,请输入您的姓名(输入0关闭连接):
0
系统提示:关闭客户端连接!

当然可以有任意多的客户端……

猜你喜欢

转载自www.cnblogs.com/qikeyishu/p/11111931.html
今日推荐