1、串口编程 Python 、pyserial
网址:http://www.douban.com/group/topic/7400483/
import sys,os import serial ser=serial.Serial(port='COM5',baudrate=9600,bytesize=8,parity='N',stopbits=1,timeout=5) str="" while ser.isOpen(): x=ser.readline(200) print x, str=str+x ser.close()
2、python socket编程 UDP
网址:http://www.2cto.com/kf/201412/360043.html
server.py
import socket BUF_SIZE = 1024 server_addr = ('127.0.0.1',8888) server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(server_addr) while True: print "waiting for data" data,client_addr = server.recvfrom(BUF_SIZE) print 'Connected by ',client_addr,' Receive data : ',data server.sendto(data,client_addr) server.close()
client.py
import socket import struct BUF_SIZE = 1024 server_addr = ('127.0.0.1',8888) client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True: data = raw_input("Please input some string > ") client.sendto(data,server_addr) data,addr = client.recvfrom(BUF_SIZE) print "Data : ",data client.close()
3、python网络编程之TCP通信实例和socketserver框架使用例子
1)TCP是一种面向连接的可靠地协议,在一方发送数据之前,必须在双方之间建立一个连接,建立的过程需要经过三次握手,通信完成后要拆除连接,需要经过四次握手,这是由TCP的半关闭造成的,一方在完成数据发送后要发送一个FIN来终止这个方向的连接,一个TCP连接在收到一个FIN后仍能发送数据,但应用程序很少这么做,下面是TCP连接建立和拆除的过程:
2)python可以实现TCP服务器和客户端的编程,下面是代码:
服务器端:
#!/usr/bin/env python import socket host="localhost" port=10000 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((host,port)) s.listen(5) while 1: sock,addr=s.accept() print "got connection form ",sock.getpeername() data=sock.recv(1024) if not data: break else: print data
客户端:
#!/usr/bin/env python import socket host="localhost" port=10000 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) s.send("hello from client") s.close()
3)使用socketserver框架编写TCP服务器
Socketserver模块可以简化网络服务器的编写,它包含了四种服务器类,TCPServer使用TCP协议,UDPServer使用UDP协议,还有两个不常使用的,即UnixStreamServer和UnixDatagramServer,这两个类仅仅在unix环境下有用。
使用服务器编程,需要进行一下步骤,先建立一个请求句柄类,这个类继承自BaseRequestHandler类,建立这个类后重写它的handle方法,然后实例化服务器类,把主机名,端口号和句柄类传给它,然后调用server_forever()方法来处理请求。
使用socketserver框架的服务器:
import SocketServer host='' port=10000 class Handler(SocketServer.StreamRequestHandler): def handler(self): addr=self.request.getpeername() print "got connection from",addr self.wfile.write("connected") server=SocketServer.TCPServer((host,port),Handler) server.serve_forever()
上面的socketserver服务器只能处理一个请求,如果要处理多个请求,可以用forking或者threading实现,实现多进程或者多线程服务器。下面是使用forking和threading的服务器代码:
使用forking的服务器:
from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandler class Server(ForkingMixIn,TCPServer):pass class Handler(StreamRequestHandler): def handle(self): addr=self.request.getpeername() print "got connection from",addr self.wfile.write('connected') server=Server((''.10000),Handler) server.serve_forever()
使用多线程的服务器:
from SocketServer import TCPServer,ThreadingMixIn,StreamRequestHandler class Server(ThreadingMixIn,TCPServer):pass class Handler(StreamRequestHandler): def handle(self): addr=self.request.getpeername() print "got connection from",addr self.wfile.write("connected") server=Server(('',10000),Handler) server.serve_forever()
4、python Tcp 小例子
服务端代码server.py #coding:utf-8 import socket import datetime """ 定义基本的信息 """ HOST = "" #主机 PORT = 23151 #端口 ADD = (HOST, PORT) BUFFERSIZE = 1024 #缓冲区大小 """ 建立socket,绑定地址和开始监听 """ TcpSerSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建socket TcpSerSock.bind(ADD) #绑定地址和端口 TcpSerSock.listen(10) #开始监听,监听数目同时间不超过10个 """ socekt建好后,开始进行连接和数据的传输 """ print "服务器等待连接......" TcpCliSock, addr = TcpSerSock.accept() #开始连接 while True: date = TcpCliSock.recv(BUFFERSIZE) #接受数据 if date: #如果接受到了数据 curTime = datetime.datetime.now() #获得当前时间 格式是:datetime.datetime(2012, 3, 13, 1, 29, 51, 872000) curTime = curTime.strftime('%Y-%m-%m %H:%M:%S') #转换格式 print "%s %s" % (addr, curTime) print date #发数据 sendDate = raw_input("input:") TcpCliSock.send('%s' % (sendDate)) #发数据 if date == '88': break """ 连接完毕,关闭套接字 """ print "server close" TcpCliSock.close() TcpSerSock.close() 客户端代码 client.py #coding:utf-8 import socket import datetime """ 定义基本的信息: 主机和端口要和服务器一致 """ HOST = "localhost" #服务其地址 PORT = 23151 #服务器端口 BUFFERSIZE = 1024 ADDR = (HOST, PORT) """ 建立套接字,开始连接 """ TCPClient = socket.socket(socket.AF_INET, socket.SOCK_STREAM) TCPClient.connect(ADDR) #连接服务器 """ 开始进行数据的传输 """ while True: senddate = raw_input("input:") if senddate: TCPClient.send('%s' % (senddate)) #发送数据 recvdate = TCPClient.recv(BUFFERSIZE) #接受数据 curTime = datetime.datetime.now() #获得当前时间 格式是:datetime.datetime(2012, 3, 13, 1, 29, 51, 872000) curTime = curTime.strftime('%Y-%m-%m %H:%M:%S') #转换格式 print "%s %s" % (HOST, curTime) print recvdate if recvdate == '88': break """ 传输完毕,关闭套接字 """ print "client close" TCPClient.close()