服务器
server.py
import socket #socket模块
import time #时间模块
import threading #线程模块
#定义一个函数用来进行具体的数据交互,由子线程调用.
def session(sock, addr):
print('欢迎新 %s:%s...' % addr)
sock.send(b'Welcome!')
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data == b'quit':
print('客户端已退出.')
break
else:
# 将接收到的字节数据解码为字符串
received_msg = data.decode('utf-8')
print('客户端消息:', received_msg)
# 发送数据给客户端
response = '服务器收到消息:' + received_msg
# 将字符串编码为字节数据后发送
sock.sendall(response.encode('utf-8'))
# sock.sendall("服务器收到消息")
# 关闭连接
sock.close()
print('来自 %s:%s 的连接已关闭.' % addr)
#创建 socket 监听对象:
#创建 TCP socket
#创建一个socket套接字,该套接字还没有建立连接
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#监听端口
#绑定监听端口,localhost和127.0.0.11是本机之间的进程通信使用的
server.bind(('127.0.0.1',1234))
#如果是局域网中两台主机之间的通信,绑定监听端口时,这里必须填本机的IP,例如192.168.27.238
#server.bind(('192.168.27.238',6666))
#开始监听,并设置最大连接数
server.listen(5)
print('服务器正在等待客户的连接……')
# print(u'waiting for connect...')
while True:
#等待连接,一旦有客户端连接后,返回一个建立了连接后的套接字和连接客户端的IP和端口元组
#connect,(host,port)=server.accept()
#print(u'the client %s:%s has connected.' %(host,port))
# 接受一个新连接:
sock, addr = server.accept()
# 创建新线程来处理TCP连接:
t = threading.Thread(target=session, args=(sock, addr))
t.start()
客户端
client.py
# 导入socke模块
import socket
# 创建一个socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
# 主动去连接局域网内IP为127.0.0.1,端口为1234的进程
client.connect(('127.0.0.1', 1234))
# 接收欢迎消息:
print(client.recv(1024).decode('utf-8'))
for data in [b'Rose', b'Think', b'Babala']:
# 发送数据:
client.send(data)
print(client.recv(1024).decode('utf-8'))
while True:
#接受控制台的输入
data=input('please input data:')
#对数据进行编码格式转换,不然报错
data=data.encode('utf-8')
#如果输入quit则退出连接
if data == b'quit':
print(b'connect quit.')
break
else:
#发送数据
client.sendall(data)
#接收服务端的反馈数据
rec_data=client.recv(1024)
#print(b'form server receive:' + rec_data)
# 发送数据告诉服务器退出连接
client.sendall(b'quit')
# client.send(b'exit')
client.close()