路飞学城Python-Day27(复习)
简单的socket通信
import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('127.0.0.1', 8080)) msg = input('>>>').strip() client.send(msg.encode('gbk')) res = client.recv(1024) print(res) client.close()
import socket sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sk.bind(('127.0.0.1', 8080)) sk.listen(5) conn, addr = sk.accept() res = conn.recv(1024) conn.send(res.upper()) conn.close() sk.close()
聊天版socket通信
import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('127.0.0.1', 8080)) while True: msg = input('发送信息>>>').strip() client.send(msg.encode('gbk')) re = client.recv(1024) print('接收到的消息%s'%(re.decode('gbk')))
import socket server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('127.0.0.1', 8080)) server.listen(5) while True: conn,addr = server.accept() while True: try: msg = conn.recv(1024) print('接收到客户端的信息%s'%(msg.decode('gbk'))) re = input('请回复信息>>>').strip() conn.send(re.encode('gbk')) except ConnectionResetError: pass
粘包版socket通信
import socket import struct import pickle client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('127.0.0.1', 8080)) while True: msg = input('请输入发送的消息>>>').strip() msg_dict = { 'msg':msg } msg_p = pickle.dumps(msg_dict) client.send(struct.pack('i',len(msg_p))) res = pickle.loads(client.recv(1024)) if res['confirm']: client.send(msg.encode('gbk')) else: pass
import socket import struct import pickle server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('127.0.0.1', 8080)) server.listen(5) while True: conn, addr = server.accept() while True: res = conn.recv(4) receive_bytes = struct.unpack('i',res)[0] if receive_bytes<1024: msg = { 'confirm': True, } msg_p = pickle.dumps(msg) conn.send(msg_p) res = conn.recv(1024) print(res.decode('gbk')) else: msg = { 'confirm':False, } msg_p = pickle.dumps(msg) conn.send(msg_p)
写一个异常
try: int_number = int(input('请输入一个整数').strip()) print(int_number) except Exception as e: print(e)
自定义异常
class E(BaseException): def __init__(self): err = '发生异常了!' BaseException.__init__(self,err) raise E
windows系统版客户端和服务端
import socket import pickle import struct import subprocess client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('127.0.0.1', 8080)) while True: command = input('请输入命令>>>').strip() msg_dict = { 'msg':command } msg = pickle.dumps(msg_dict) client.send(struct.pack('i', len(msg))) res = client.recv(1024) if pickle.loads(res)['confirm']: client.send(command.encode('gbk')) # 解析长度 res_len = client.recv(4) cmd_len = struct.unpack('i',res_len)[0] # 接收结果 fin_res = client.recv(cmd_len).decode('gbk') print(fin_res) else: print('超出字符限制,请重试!')
import socket import pickle import struct import subprocess # a=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE) # print(a.stdout.read().decode('gbk')) server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('127.0.0.1', 8080)) server.listen(5) while True: conn, addr = server.accept() while True: try: res = conn.recv(4) res_bytes = struct.unpack('i',res)[0] if res_bytes<1024: msg = { 'confirm':True, } conn.send(pickle.dumps(msg)) cmd = conn.recv(1024).decode('gbk') cmd_res = subprocess.Popen( cmd, shell= True, stdout= subprocess.PIPE, stderr= subprocess.PIPE ) res_cmd = cmd_res.stdout.read() # 发送长度 conn.send(struct.pack('i',len(res_cmd))) # 发送结果 conn.send(res_cmd) else: msg = { 'confirm': False, } conn.send(pickle.dumps(msg)) except Exception as e: print(e) break
Win a contest, win a challenge
posted on 2018-07-26 11:19 pandaboy1123 阅读(121) 评论(0) 编辑 收藏 举报