首先运行服务端,待服务端运行起来之后,最后开始运行客户端进行对话,可以运行多个客户端和服务端对话,注意这个开启的客户端的顺序和服务端的聊天顺序(其实就是阻塞,待上一个客户端和服务端的一段对话结束之后,开启另外一个客户端和服务端的对话)。 客户端:
import os
import cv2
import socket
remote_IP='127.0.0.1'
remote_port=5555
remote_addr=(remote_IP,remote_port)
socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket.connect(remote_addr)
def client_send_recv(socket):
"""
:param socket: 客户端套接字
:return:
"""
while True:
print('结束对话: (Q)')
str=input('请输入发送给服务端的内容对话内容: ')
if str=='Q' or str=='q':
str = str.encode('utf-8')
socket.send(str)
print('客户端结束对话')
break
else:
str=str.encode('utf-8')
socket.send(str)
str=socket.recv(1024).decode('utf-8')
if str == 'Q' or str == 'q':
print('服务器结束对话')
break
print('接收来自服务端发送的内容: {}'.format(str))
socket.close()
if __name__=='__main__':
client_send_recv(socket)
服务端:
import os
import cv2
import socket
import threading
remote_IP='127.0.0.1'
remote_port=5555
remote_addr=(remote_IP,remote_port)
socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定IP地址和端口号
socket.bind(remote_addr)
#监听来自客户端的信息
socket.listen()
print('正在监听来自客户端的信息......')
IsConnection=True
def server_send_recv(new_socket,addr):
"""
:param new_socket:
:return:
"""
global IsConnection
while True:
print('结束对话: (Q or q)')
str=new_socket.recv(1024).decode('utf-8')
if str=='Q' or str=='q':
print('服务器结束对话')
IsConnection=False
break
else:
print(str)
str=input('请输入发送给客户端的内容对话内容: ')
str=str.encode('utf-8')
new_socket.send(str)
if str=='q' or str=='Q':
print('服务器对话结束')
IsConnection = False
break
new_socket.close()
if __name__=='__main__':
while True:
# new_socket用于与客户机的对话
new_socket, addr = socket.accept()
thread_server=threading.Thread(target=server_send_recv,args=(new_socket,addr))
thread_server.start()
if IsConnection==False:
break
|