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 ...
随机推荐
- Linux下使用crontab命令配置定时任务
一.语法结构 crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ] 说明 : crontab 是用来让使用者在 ...
- MySQL如何找出未提交事务信息
前阵子,我写了一篇博客"ORACLE中能否找到未提交事务的SQL语句", 那么在MySQL数据库中,我们能否找出未提交事务执行的SQL语句或未提交事务的相关信息呢? 实验验证了一下 ...
- hihoCoder #1165 : 益智游戏 (挑战赛11 B题)
题意:在一个序列中找到两个数a和b,使得a*b的因子个数最多,输出最多的因子个数. 思路:数据较多,处理会很慢.对序列中每个数字进行质数分解求因子个数,然后按照因子个数降序排列,对前50个因子最多的数 ...
- method 'redisConnectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError
spring boot 整合redis是报了如下错误 org.springframework.beans.factory.UnsatisfiedDependencyException: Error c ...
- CF Gym 100187B A Lot of Joy (古典概型)
题意:给两个一样的只含有26个小写字母的字符串,然后两个分别做一下排列,问如果对应位置的字母相等那么就愉悦值就加一,问愉悦值的期望是多少? 题解:只考虑两个序列相对的位置,那么就相当于固定一个位置,另 ...
- Expires和Cache-Control
本文原链接:https://blog.csdn.net/zhouziyu2011/article/details/71312452 浅谈前端性能优化(一)——Expires和Cache-Control ...
- 使用ServiceController组件控制计算机服务
实现效果: 知识运用: ServiceController组件的MachineName属性 //获取或设置服务所驻留的计算机名称 public string MachineName{get;set;} ...
- JS函数的length属性
length 是函数对象的一个属性值,指该函数有多少个必须要传入的参数,那些已定义了默认值的参数不算在内,比如function(xx = 0)的length是0.. 另外在函数内部:arguments ...
- Spring XML配置文件无法自动提示 eclipse中XML配置文件open with打开方式选择 XML Editor:注意它的编辑方式也是有两种的design和source
双击XML配置文件,如果打开方式不正确 则如下图: 都是灰色显示,不会有自动提示,也不会有颜色标注 右击XML配置文件,选择打开方式为XML Editor,则会有颜色标注 如果此时没有自动提示 则要手 ...
- Angular-网页定时刷新
类上方引入“OnInit”.“OnDestroy” import { OnInit, OnDestroy } from '@angular/core'; 类实现“OnInit”.“OnDestroy” ...