socker
一个简单的socket连接
import socket
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.bind(('127.0.0.1', 9090))
phone.listen(5)
print('starting...')
conn, client_addr = phone.accept()
data = conn.recv(1024)
print('客户端的消息',data)
conn.send(data.upper())
conn.close()
phone.close()
import socket
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 9090))
phone.send('hello'.encode('utf-8'))
data = phone.recv(1024)
print(data)
phone.close()
通讯循环
import socket
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.bind(('127.0.0.1', 9090))
phone.listen(5)
print('starting...')
conn, client_addr = phone.accept()
print(client_addr)
while True:
data = conn.recv(1024)
conn.send(data.upper())
conn.close()
phone.close()
import socket
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 9090))
while True:
msg = input('>>>:').strip()
phone.send(msg.encode('utf-8'))
data = phone.recv(1024)
print(data)
phone.close()
socket通讯时遇到的bug客户端突然暴毙和客户端传入空值
import socket
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
phone.bind(('127.0.0.1', 9090))
phone.listen(5)
print('starting...')
conn, client_addr = phone.accept()
print(client_addr)
while True:
try:
data = conn.recv(1024)
except ConnectionResetError:
break
print(data)
conn.send(data.upper())
conn.close()
phone.close()
import socket
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 9090))
while True:
msg = input('>>>:').strip()
if not msg:continue
phone.send(msg.encode('utf-8'))
data = phone.recv(1024)
print(data)
phone.close()
实现服务端可以对多个客户端提供服务
import socket
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
phone.bind(('127.0.0.1', 9090))
phone.listen(5)
print('starting...')
while True :
conn, client_addr = phone.accept()
print(client_addr)
while True:
try:
data = conn.recv(1024)
except ConnectionResetError:
break
print(data)
conn.send(data.upper())
conn.close()
phone.close()
import socket
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 9090))
while True:
msg = input('>>>:').strip()
if not msg:continue
phone.send(msg.encode('utf-8'))
data = phone.recv(1024)
print(data)
phone.close()
模拟ssh远程执行命令
import json
import socket
import struct
import subprocess
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.bind(('127.0.0.1', 9900))
phone.listen(5)
print('starting...')
while True:
conn, client_addr = phone.accept()
print(client_addr)
while True:
try:
cmd = conn.recv(1024)
except ConnectionResetError or ConnectionAbortedError:
break
obj = subprocess.Popen(cmd.decode('utf-8'), shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout = obj.stdout.read()
stderr = obj.stderr.read()
headr_dir = {
'filename': 'a.txt',
'md5': 'xxxx',
'total_size': len(stdout) + len(stderr)
}
headr_json = json.dumps(headr_dir)
headr_bytes = headr_json.encode()
conn.send(struct.pack('i', len(headr_bytes)))
conn.send(headr_bytes)
conn.send(stdout)
conn.send(stderr)
conn.close()
phone.close()
import json
import socket
import struct
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 9900))
while 1:
cmd = input('>>>:').strip()
if not cmd: continue
phone.send(cmd.encode('utf-8'))
obj = phone.recv(4)
header_size = struct.unpack('i', obj)[0]
header_bytes = phone.recv(header_size)
header_json = header_bytes.decode('utf-8')
header_dic = json.loads(header_json)
header = header_dic['total_size']
total_size = header
recv_size = 0
recv_data = b''
while recv_size < total_size:
res = phone.recv(1024)
recv_data += res
recv_size += len(res)
print(recv_data.decode('gbk'))
phone.close()
实现文件传输
import json
import socket
import hashlib
import os
import struct
import subprocess
def get(conn,cmds):
filename = cmds[1]
headr_dir = {
'file_name': ''.join(filename.split('\\')[-1:]),
'md5': 'xxxxx',
'file_size': os.path.getsize(filename)
}
print(headr_dir)
headr_json = json.dumps(headr_dir)
headr_bytes = headr_json.encode()
conn.send(struct.pack('i', len(headr_bytes)))
conn.send(headr_bytes)
print(filename)
with open(filename, 'rb') as f:
for line in f:
conn.send(line)
def run():
phone = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
phone.bind(('127.0.0.1', 9900))
phone.listen(5)
print('starting...')
while True:
conn, client_addr = phone.accept()
print(client_addr)
while True:
try:
res = conn.recv(1024)
except ConnectionResetError or ConnectionAbortedError:
break
cmds = res.decode('utf-8').split()
if cmds[0] == 'get':
get(conn,cmds)
conn.close()
phone.close()
if __name__ == '__main__':
run()
import json
import socket
import struct
def get(phone):
obj = phone.recv(4)
header_size = struct.unpack('i', obj)[0]
header_bytes = phone.recv(header_size)
header_json = header_bytes.decode('utf-8')
header_dic = json.loads(header_json)
file_size = header_dic['file_size']
file_name = header_dic['file_name']
print(type(file_name))
with open(file_name, 'wb') as f:
print('开始写入')
total_size = file_size
recv_size = 0
while recv_size < total_size:
lien = phone.recv(1024)
f.write(lien)
recv_size += len(lien)
print('总大小:%s 已下载大小:%s' % (total_size, recv_size))
def run():
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 9900))
while True:
inp = input('>>>:').strip()
if not inp: continue
phone.send(inp.encode('utf-8'))
cmd = inp.split()
print(cmd)
if cmd[0] == 'get':
get(phone)
phone.close()
if __name__ == '__main__':
run()