from socket import *
#以下是关于tcp:服务端 和 客户端的小例子
#服务端
socket_server = socket(AF_INET, SOCK_STREAM)
socket_server.bind(('127.0.0.1', 8080))
print('进行监听')
socket_server.listen(5)
while True:
print('进行连接')
conn, address = socket_server.accept()
print('连接成功')
while True:
data=conn.recv(1024)
if not len(data):break
conn.send(data.upper())
print(data.decode(encoding='utf-8'))
conn.close()
socket_server.close()
from socket import *
import struct
socket_client = socket(AF_INET, SOCK_STREAM)
print('进行连接')
socket_client.connect(('127.0.0.1', 8080))
print('连接成功')
while True:
msg = input('请输入')
if not len(msg): continue
socket_client.send(msg.encode(encoding='utf-8'))
data =socket_client.recv(1024)
print(data.decode(encoding='utf-8'))
socket_client.close()
#远程执行命令的小例子
#服务端
import socket
import os
import subprocess
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('进行绑定,监听')
phone.bind(('127.0.0.1', 8080))
phone.listen(5)
def cmd(cmdlist):
obj=subprocess.Popen(
cmdlist,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
stdout_res=obj.stdout.read()
stderr_res=obj.stderr.read()
return stdout_res+stderr_res#假如不写成方法,这里可以分成两次发送过去,更加节省内存
while True:
conn, add = phone.accept()
print('建立连接')
while True:
try:
msg = conn.recv(1024)
if not len(msg):
break
print('执行命令')
print(msg)
#os.system(msg.decode(encoding='utf-8'))
stdout_res=cmd(msg.decode(encoding='utf-8'))
print('发送消息')
conn.send(stdout_res)
except Exception:
break
conn.close()
phone.close()
#客户端
import socket
st = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
st.connect(('127.0.0.1', 8080))
while True:
msg=input('请输入cmd 命令').strip()
print('发送消息')
if not len(msg):continue
st.send(msg.encode(encoding='utf-8'))
data=st.recv(1024)
print(data.decode('gbk'))
st.close()
#获取服务端内容小例子
from socket import *
import struct
import subprocess
import json
st = socket(AF_INET, SOCK_STREAM)
print('绑定并且监听')
st.bind(('127.0.0.1', 8080))
st.listen(5)
print('绑定监听成功')
while True:
conn, _ = st.accept()
print('与客户端建立连接成功')
while True:
try:
cmd = conn.recv(1024)
if not len(cmd): break
cmd = cmd.decode(encoding='utf-8')
if cmd != 'get':
obj_sub = subprocess.Popen(cmd,
shell=True,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
sub_out = obj_sub.stdout.read()
sub_err = obj_sub.stderr.read()
total_size = len(sub_err) + len(sub_out)
file_path = '为空'
else:
file_path = 'get.txt'
import os
total_size = os.path.getsize(file_path)
header_dic = {
'file_name': file_path,
'total_size': total_size,
'hashlib': '还没有有开始写呢'
}
header_json = json.dumps(header_dic)
header_bytes = header_json.encode(encoding='utf-8')
conn.send(struct.pack('i', len(header_bytes))) # 将文件头的长度发送给客户端
conn.send(header_bytes) # 将文件头的内容发给客户端
if cmd == 'get':
with open(file_path, 'rb') as f:
for line in f:
conn.send(line)
else:
conn.send(sub_out) # 正常内容
conn.send(sub_err) # 错误消息
except ConnectionResetError:
break
conn.close()
st.close()
from socket import *
import struct
import subprocess
import json
st = socket(AF_INET, SOCK_STREAM)
st.connect(('127.0.0.1', 8080))
print('与客户端建立连接')
while True:
msg = input('请输入cmd命令:').strip()
if not len(msg):
continue
st.send(msg.encode(encoding='utf-8'))
header_struct_len = st.recv(4)
header_len = (struct.unpack('i', header_struct_len))[0]
header_json_dic = st.recv(header_len) # 拿到文件头
header_dic = header_json_dic.decode(encoding='utf-8')
header_dic = json.loads(header_dic)
print(header_dic)
res = b''
while header_dic['total_size'] > 0:
data = st.recv(1024)
header_dic['total_size'] -= len(data)
res += data
# print(data.decode(encoding='gbk'))
print('msg')
if msg == 'get':
print(res.decode(encoding='utf-8'))
#print(res)
print(type(res))
else:
print(res.decode(encoding='gbk'))
st.close()
print('error')