1.基于tcp协议实现聊天基础需求:
import json
import socket
def chat(conn):
while True:
msg = conn.recv(1024).decode('utf-8')
dic_msg = json.loads(msg)
uid = dic_msg['id']
if dic_msg['msg'].upper() == 'Q':
print('%s已经下线'%color_dic[uid]['name'])
break
print('%s%s : %s\033[0m'%(color_dic[uid]['color'],color_dic[uid]['name'],dic_msg['msg']))
inp = input('>>>')
conn.send(inp.encode('utf-8'))
if inp.upper()=='Q':
print('您已经断开和%s的聊天'%color_dic[uid]['name'])
break
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
color_dic = {
'12345' : {'color':'\033[32m','name':'alex'},
'12346' : {'color':'\033[31m','name':'wusir'},
'12347' : {'color':'\033[33m','name':'yuan'},
}
while True:
conn,_ = sk.accept()
chat(conn)
conn.close()
sk.close()
import socket
import json
sk = socket.socket()
id = '12346'
sk.connect(('127.0.0.1',9000))
while True:
inp = input('>>>')
dic = {'msg':inp,'id':id}
str_dic = json.dumps(dic)
sk.send(str_dic.encode('utf-8'))
if inp.upper()=='Q':
print('您已经断开和server的聊天')
break
msg = sk.recv(1024).decode('utf-8')
if msg.upper() == 'Q':
break
print(msg)
sk.close()
2.基于udp协议实现聊天需求
基础需求:
# 能随时退出
# 能实现一个人和多个人聊天
# 并且给每个人标识一个身份
# 每个身份一种颜色
进阶需求:(选做)
# 多个人能同时互相聊
3.基于tcp协议实现用户登陆
import json
import socket
usr = input('username : ')
pwd = input('password : ')
dic = {'usr':usr,'pwd':pwd}
str_dic = json.dumps(dic)
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
sk.send(str_dic.encode('utf-8'))
ret = sk.recv(1024).decode('utf-8')
ret_dic = json.loads(ret)
if ret_dic['result']:
print('登陆成功')
else:
print("登录异常,用户名或密码错误")
sk.close()
import json
import socket
import hashlib
def get_md5(username,password):
md5 = hashlib.md5(username.encode('utf-8'))
md5.update(password.encode('utf-8'))
return md5.hexdigest()
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
conn,_ = sk.accept()
str_dic = conn.recv(1024).decode('utf-8')
dic = json.loads(str_dic)
with open('userinfo',encoding='utf-8') as f:
for line in f:
user,passwd = line.strip().split('|')
if user == dic['usr'] and passwd == get_md5(dic['usr'],dic['pwd']):
res_dic = {'opt':'login','result':True}
break
else:
res_dic = {'opt': 'login', 'result': False}
sdic = json.dumps(res_dic)
conn.send(sdic.encode('utf-8'))
conn.close()
sk.close()
4.基于tcp协议完成文件上传
import os
import json
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
file_path = input('>>>')
if os.path.isabs(file_path):
filename = os.path.basename(file_path)
filesize = os.path.getsize(file_path)
dic = {'filename':filename,'filesize':filesize}
str_dic = json.dumps(dic)
sk.send(str_dic.encode('utf-8'))
with open(file_path,mode = 'rb') as f:
content = f.read()
sk.send(content)
print('upload ok!!')
sk.close()
import json
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
conn,addr = sk.accept()
print(addr)
str_dic = conn.recv(1024).decode('utf-8')
dic = json.loads(str_dic)
content = conn.recv(dic['filesize'])
with open(dic['filename'],mode='wb') as f:
f.write(content)
conn.close()
sk.close()