目录
@
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() # 关闭连接
服务端运行记录:
服务端已经运行,等待客户端连接……
有人来连接了!
已发送“ 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
系统提示:关闭客户端连接!
当然可以有任意多的客户端……