python-网络编程-03
首先我们可以看下可以最简单的交互性的服务端和客户端程序
server
import socket def main():
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(('localhost',8000))
sock.listen(5)
while True:
print '1'
connection ,clent_addr = sock.accept()
while 1:
buf = connection.recv(1024)
connection.sendall('hi')
print buf
connection.close()
if __name__ == '__main__':
main()
[server]:在创建socket之后,服务端会一直保持阻塞状态,然后一旦有用户连接,就立即等待用户发送数据,然后接收到用户发的数据之后 理解返回一个字符后,然后状态变成等待下次连接
client
import socket
sock = socket.socket()
sock.connect(('localhost', 8000))
sock.settimeout(5)
while 1:
res = sock.recv(1024)
print res
data = raw_input('input:')
sock.sendall(data)
sock.close()
[client]:去连接server端然后不断发送数据,然后接受返回。
-------------------------------------------------------------------------------
那么你可以发现上面的server端的代码 其实只能同时接受一个请求,因为只有一个线程去处理这个段代码
那么我可以吧server端的代码换成
import SocketServer class MyServer(SocketServer.BaseRequestHandler,object):
def handle(self):
conn = self.request
conn.sendall('this is a tast')
Flag = True
while Flag:
data = conn.recv(1024)
print "data:",data
if data == "exit":
Flag = True
elif data == '0':
conn.sendall("The winter in comming")
else:
conn.sendall("please input again") if __name__ == "__main__":
server01 = SocketServer.ThreadingTCPServer(('127.0.0.1',8080),MyServer)
print "server is running.."
server01.serve_forever()
我们通过借助socket自带的类写出来了 多线程的服务器端,能够收发消息
那么我们可以在这个代码的基础上修改,能够发送命令,返回命令
[server]
import SocketServer,os class MyServer(SocketServer.BaseRequestHandler,object):
def handle(self):
conn = self.request
Flag = True
while Flag:
data = conn.recv(1024)
res = os.popen(data).read()
res_length=len(res)
conn.send(str(res_length))
msg_num = conn.recv(1024)
if msg_num == "":
print len(res),"-->len"
print "data:",data
conn.sendall(res) if __name__ == "__main__":
server01 = SocketServer.ThreadingTCPServer(('127.0.0.1',8040),MyServer)
print "server is running.."
server01.serve_forever()
[client]
import socket
sock = socket.socket()
sock.connect(('localhost', 8040))
sock.settimeout(5)
while 1:
data = raw_input('input:')
sock.sendall(data)
res_length = int(sock.recv(1024))
sock.send("")
print 'length:',res_length
while True:
if res_length <= 0:
break
res = sock.recv(1024)
print res
res_length -= 1024
sock.close()
这里需要注意的是
1:因为服务端 不知道能发送多大的数据,那么在接收数据之前我们需要,先验证一下数据长度,然后根据长度,来决定如何收取
python-网络编程-03的更多相关文章
- Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信
Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- Python 网络编程(一)
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- python网络编程-01
python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...
- 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档
Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...
- Python网络编程基础pdf
Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...
- python 网络编程(Socket)
# from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...
- python 网络编程 IO多路复用之epoll
python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解 此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...
随机推荐
- 融云红包全新升级,让App用户更便捷地用“钱”交流感情!
随着移动互联网的飞速发展,如何增强社交关系.留住用户的心已成为移动社交化时代各类App持续探索的问题,除了接入即时通讯的能力,众多社交平台开始通过趣味性十足的红包功能为App中的社交场景赋能.当即时通 ...
- [VC]ocx控件怎么屏蔽backspace的后退键
<script Language=javascript> function document.onkeydown() { if(window.event.keyCode = ...
- oracle的clob转换varchar2
time: 2008/02/29 author: skate oracle的clob转换varchar2 今天在做一个表的数据转移的时候,发现要他通过比较clob字段,但大家都知道clob字段是无法比 ...
- group - 用户组文件
DESCRIPTION(描述) /etc/group 是一个ASCII码的文件,它定义了用户所属的组.文件中每行包括一条记录,其格式如下: group_name:passwd:GID:user_lis ...
- VS2013常用快捷键[转] 注释 Ctrl+K - C 和 k - u
VS2013常用快捷键你敢不会? F1 帮助文档 F5 运行 F12 跳转到定义 F11 单步调试 Shift+F5 停止调试 Ctrl+滚轮 放大缩小当前视图 Ctrl+L 删除当前行 Ctrl ...
- 苹果市值破万亿,iPhone 会涨价吗?
今日导读 苹果教父乔布斯曾经说过:“活着就是为了改变世界.”虽然他在 56 岁时就遗憾离世,但他极具创新和变革的精神早已深埋进苹果公司的企业文化里,影响着一代又一代的人.就在最近,这家一直努力“改变世 ...
- Dojo的on函数(以前的dojo.connect)
同jQuery的on函数: require(["esri/map", "dojo/on"], function(Map, on) { // ... on(my ...
- webgis技术在智慧城市综合治理(9+X)网格化社会管理平台(综治平台)的应用研究
综治中心9+X网格化社会管理平台 为落实中央关于加强创新社会治理的要求,适应国家治理体系和治理能力现代化要求,以基层党组织为核心,以整合资源.理顺关系.健全机制.发挥作用为目标,规范街道.社区综治中心 ...
- mysql 从陌生到熟练之----数据库备份恢复的实现方法
mysql 从陌生到熟练之----数据库备份恢复的实现方法 MySQL数据库使用命令行备份|MySQL数据库备份命令 例如: 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:roo ...
- 01_3_查询指定id的单个对象
01_3_查询指定id的单个对象 1. 映射文件配置如下信息 <select id="selectStudentById" resultClass="Student ...