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()