初识socket,下面是的进行简单操作
#############################################################################
模拟对话
serve.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
"""
@author: ‘FMspider‘
@time: 2018-5-2 7:46
@function: 服务端
"""
import socket
# 创建实例
sk = socket.socket()
# 绑定服务端本机地址
adderss = ('127.0.0.1', 8000)
sk.bind(adderss)
#设置客户端请求数量(最大排队数)
sk.listen(3)
print('waiting...')
while 1: # 等待下一个用户接连
conn,addr = sk.accept()
while 1: # 不间断的聊天
try: # 异常处理,处理客户直接中断客户端
data = conn.recv(1024) # 一收
except Exception:
break
print(str(data,'utf8'))
if not data:break
inp = input(':::') # 一发
conn.send(bytes(inp,'utf8'))
client.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
"""
@author: ‘FMspider‘
@time: 2018-5-2 7:46
@function: 客户端
"""
import socket
# 创建实例
sk = socket.socket()
# 绑定要连接的服务端地址
address = ('127.0.0.1', 8000)
sk.connect(address)
while 1:
#输入并发送数据
inp = input('>>>')
if inp == 'q': # 退出条件判断
break
sk.send(bytes(inp, 'utf8')) # 一发
#接收数据并打印
data = sk.recv(1024) # 一收
print(str(data,'utf8'))
sk.close() # 关闭接连
#############################################################################
远程执行命令(在本机)
cmd_serve.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
"""
@author: ‘FMspider‘
@time: 2018-5-2 8:43
@function: 远程执行命令_服务端
"""
import socket
import subprocess
sk = socket.socket()
adderss = ('127.0.0.1', 9000)
sk.bind(adderss)
sk.listen(3)
print('waiting...')
while 1: # 等待下一个用户接连
conn,addr = sk.accept()
while 1: # 不间断的聊天
try: # 异常处理,处理客户直接中断客户端
data = conn.recv(1024) # 一收
except Exception:
break
if not data: break
# 命令行操作
obj = subprocess.Popen(str(data,'utf8'), shell=True, stdout=subprocess.PIPE)
cmd_result = obj.stdout.read()
result_len = bytes(str(len(cmd_result)),'utf8') # 获取命令长度并换bytes类型
conn.send(result_len) # 向客户端发送长度
conn.recv(1024) # 解决粘包问题
conn.sendall(cmd_result) # 发送命令内容
cmd_client.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
"""
@author: ‘FMspider‘
@time: 2018-5-2 8:43
@function: 远程执行命令_客户端
"""
import socket
# 创建实例
sk = socket.socket()
# 绑定要连接的服务端地址
address = ('127.0.0.1', 9000)
sk.connect(address)
while 1:
#输入并发送数据
inp = input('>>>')
if inp == 'q': # 退出条件判断
break
sk.send(bytes(inp, 'utf8')) # 一发
result_len = sk.recv(1024) # 粘包
sk.send(bytes(' ', 'utf8'))
# print(result_len)
cmd = bytes()
while bytes(str(len(cmd)),'utf8') != result_len: # 循环接收数据
# print(len(cmd))
# print(result_len)
#接收数据并打印
data = sk.recv(1024) # 一收
cmd += data
print(str(cmd, 'gbk'))
sk.close() # 关闭接连
#############################################################################
模拟文件上传
post_serve.py
# !/usr/bin/python
# -*- coding:utf-8 -*-
# ++++++++++++++++++++
# author: FMspider
# time: 2018-5-2 11:03
# function: 上传文件_serve
import os
import socket
sk = socket.socket()
adderss = ('127.0.0.1', 8000)
sk.bind(adderss)
sk.listen(3)
print('waiting.....')
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
while 1:
conn, addr = sk.accept()
while 1:
data = conn.recv(1024)
cmd, filemame, filesize = str(data,'utf8').split('|') #一收
path = os.path.join(BASE_DIR,'images',filemame) # 要保存的绝对路径
filesize = int(filesize) # 换int类型
f = open(path,'ab') # 打开文件,写入
has_receive = 0
while has_receive != filesize:
data = conn.recv(1024)
f.write(data)
has_receive += len(data)
f.close()
post_client.py
# !/usr/bin/python
# -*- coding:utf-8 -*-
# ++++++++++++++++++++
# author: FMspider
# time: 2018-5-2 11:04
# function: 上传文件_client
import os
import socket
sk = socket.socket()
adderss = ('127.0.0.1', 8000)
sk.connect(adderss)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
while True:
inp = input('>>>').strip() # post|img.png
cmd, path = inp.split('|')
path = os.path.join(BASE_DIR, path) # 获取文件路径
filename = os.path.basename(path) # 获取文件名
file_size = os.stat(path).st_size #获取文件大小
file_info = 'post|%s|%s' %(filename, file_size)
sk.sendall(bytes(file_info,'utf8')) #一发
f = open(path,'rb')
has_sent = 0
while has_sent != file_size:
data = f.read(1024)
sk.sendall(data)
has_sent += len(data)
f.close()
print('上传成功!')