服务端:
import socket,subprocess,threading,logging
‘‘‘
创建日志屏幕格式输出‘‘‘
loger=logging.getLogger(‘service‘)
loger.setLevel(logging.DEBUG)
fa = logging.Formatter(‘%(asctime)s %(levelname)s :%(message)s ‘)
cf = logging.StreamHandler()
cf.setFormatter(fa)
loger.addHandler(cf)
# a = subprocess.Popen(‘ipconfig‘,shell=True)
# a.wait()
‘‘‘
建立文件如 s1.py
‘‘‘
lient_list = [] # 存放客户端的对象
def service_to_client(var):
fd=var.fileno() # 输出对于客户端的文件编号
try:
while True:
mess_c=var.recv(1024)
print(‘[客户端编号{}]: {}‘.format(fd,mess_c.decode(‘utf-8‘)))
if mess_c.decode(‘utf-8‘) == ‘close‘:
loger.debug(‘接受到关闭请求,发送确认,即将关闭‘)
var.send(mess_c)
var.close()
break
var.send(mess_c) # 返回给相应的客户端
except Exception as e:
print(‘客户端异常断开‘,e)
def reginer_sql():
‘‘‘
存放客户端的注册账号信息,用于用户登录确认操作
:return:
‘‘‘
ser_obj=socket.socket(family=-1,type=-1)
address = (‘192.168.1.205‘,5050)
ser_obj.bind(address)
ser_obj.listen(2)
while True: #循环服务器,堵塞式等待连接
print(‘waitting.....‘)
cli_socket,port = ser_obj.accept()
lient_list.append(cli_socket)
for i in lient_list:
threading.Thread(target=service_to_client,args=(cli_socket,)).start() # 当有客户端链接时,就开启一个进程
客户端:
import socket
cli1_obj=socket.socket(family=-1,type=-1)
address = (‘192.168.1.205‘,5050)
cli1_obj.connect(address)
def reginer():
‘‘‘
注册函数,账号和密码登录正确后才能进行通信
:return:
‘‘‘
while True:
cli1_obj.send((input(‘>>>>>>>>>>:‘)).encode(‘utf-8‘))
mess_ser = cli1_obj.recv(1024)
print(‘service Confirmed:{}‘.format(mess_ser.decode(‘utf-8‘)))
if mess_ser.decode(‘utf-8‘) == ‘close‘:
print(‘服务端已确认,可关闭‘)
cli1_obj.close()
break
原文:https://www.cnblogs.com/yhmdj/p/14629968.html