Python学习笔记(12)socket
socket三个例
1.客户端与服务端互发消息
import socket
sk = socket.socket()
address = ('127.0.0.1', 8000)
sk.connect(address)
while True:
inp = input('>>>')
if inp == 'exit':
break
sk.send(bytes(inp, 'utf8'))
data = sk.recv(1024)
print(str(data, 'utf8'))
sk.close()
import socket
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = ('127.0.0.1', 8000)
sk.bind(address)
sk.listen(3)
print('waiting...')
while True:
conn, addr = sk.accept()
print(addr)
while True:
try:
data = conn.recv(1024)
except Exception:
break
if not data:
break
print(str(data, 'utf8'))
inp = input('>>>')
conn.send(bytes(inp, 'utf-8'))
sk.close()
2.客户端发送文件到服务端
import socket
import os
sk = socket.socket()
address = ('127.0.0.1', 8000)
sk.connect(address)
Base_DIR = os.path.dirname(os.path.abspath(__file__))
while True:
inp = input('>>>') # 传入post与文件名
cmd, path = inp.split('|')
path = os.path.join(Base_DIR, path) # 拼接路径
filename = os.path.basename(path) # 获取文件名
print(filename)
file_size = os.stat(path).st_size # 计算文件大小
file_info = 'post|%s|%s' % (filename, file_size)
sk.sendall(bytes(file_info, 'utf8'))
with open(path, 'rb') as f:
has_sent = 0
while has_sent != file_size:
data = f.read(1024)
sk.sendall(data)
has_sent += len(data)
print('上传成功')
sk.close()
import socket
import os
sk = socket.socket()
address = ('127.0.0.1', 8000)
sk.bind(address)
sk.listen(3)
print('waiting...')
Base_DIR = os.path.dirname(os.path.abspath(__file__))
while True:
conn, addr = sk.accept()
while True:
data = conn.recv(1024)
cmd, filename, file_size = str(data, 'utf8').split('|')
path = os.path.join(Base_DIR, 'image', filename)
file_size = int(file_size)
has_receive = 0
with open(path, 'ab') as f:
while has_receive != file_size:
data = conn.recv(1024)
f.write(data)
has_receive += len(data)
sk.close()
3.客户端发送cmd命令到服务端执行并返回
客户端
import socket
sk = socket.socket()
address = ('127.0.0.1', 8000)
sk.connect(address)
while True:
inp = input('>>>')
if inp == 'exit':
break
sk.send(bytes(inp, 'utf8'))
result_len = int(str(sk.recv(1024), 'utf8'))
sk.send(b'ok')
print(result_len)
data = bytes()
while len(data) != result_len:
data += sk.recv(1024)
print(str(data, 'gbk'))
sk.close()
服务端
import socket
import subprocess
sk = socket.socket()
address = ('127.0.0.1', 8000)
sk.bind(address)
sk.listen(3)
while True:
conn, addr = sk.accept()
print(addr)
while True:
try:
data = conn.recv(1024)
except Exception:
break
if not data:
break
print(str(data, 'utf8'))
obj = subprocess.Popen(str(data, 'utf-8'), shell=True, stdout=subprocess.PIPE)
cmd_result = obj.stdout.read()
result_len = bytes(str(len(cmd_result)), 'utf8')
conn.send(result_len)
conn.recv(1024)
conn.send(cmd_result)
sk.close()
socketserver
socketserver
class Myserver(socketserver.BaseRequestHandler):
def handle(self):...
if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1', 8000), Myserver)
server.serve_forever()
浙公网安备 33010602011771号