1.基于tcp协议实现聊天基础需求:

# 1.server和client端连接之后,能知道对面这个人是哪一个好友  q号
# 2.不同好友的聊天颜色不同 
#server.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# tcp协议的聊天
    # 1.能和一个人聊之后再和另一个人聊
    # 2.给每个人加颜色
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()
#client.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
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协议实现用户登陆

# 基础 :只实现基础的登陆即可
# 进阶 :加入hashlib密文存储密码
# 密文摘要 在server端还是client端?
#client.py



#!/usr/bin/env python
# -*- coding:utf-8 -*-

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()
#server.py



#!/usr/bin/env python
# -*- coding:utf-8 -*-
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()

# print(get_md5('ljb','ljb123'))
#userinfo
#ljb|6463b7cb0f9d377003541eb5fe4b9055
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)
# print(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协议完成文件上传

# 基础的需求 :两台机器能从一台发送给另一台就可以了
# 进阶的需求 :考虑大文件(选做)
#client.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
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()
#server.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
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()