python 网络编程 TCP套接字实例
2014-03-25 17:21
190 查看
一. 服务器端代码tcpServer.py:
客户端代码tcpClient.py:
二、 使用SocketServer模块实现TCP服务器端和客户端
SocketServer是标准库中的一个高级模块,用于简化服务器端与客户端的实现。
客户端代码,server.py:
客户端代码,client.py:
from socket import * from time import ctime #HOST变量为空,表示bind()函数可以绑定在所有有效的地址上 HOST = '' PORT = 21234 #设置缓冲大小为128,可以根据网络情况和需求来进行修改 BUFSIZ = 128 ADDR = (HOST, PORT) #创建TCP套接字 tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) #listen()函数的参数表示最多允许同时接收的连接数,超过这个数目的连接会被拒绝掉 tcpSerSock.listen(5) while True: print 'waiting for connection...' tcpCliSock, addr = tcpSerSock.accept() print '...connected from:', addr while True: #接收数据 data = tcpCliSock.recv(BUFSIZ) if not data: break #发送数据 tcpCliSock.send('From server response:[%s] %s' % (ctime(), data)) tcpCliSock.close() tcpSerSock.close()
客户端代码tcpClient.py:
from socket import * HOST = 'localhost' PORT = 21234 BUFSIZ = 128 ADDR = (HOST, PORT) #创建客户端TCP套接字 tcpCliSock = socket(AF_INET, SOCK_STREAM) #连接服务器 tcpCliSock.connect(ADDR) while True: data = raw_input('>') if not data: break #发送数据 tcpCliSock.send(data) #接收数据 data = tcpCliSock.recv(BUFSIZ) if not data: break print data tcpCliSock.close()
二、 使用SocketServer模块实现TCP服务器端和客户端
SocketServer是标准库中的一个高级模块,用于简化服务器端与客户端的实现。
客户端代码,server.py:
from SocketServer import (TCPServer as TCP, StreamRequestHandler as SRH) from time import ctime HOST = '' PORT = 20123 ADDR = (HOST, PORT) #继承SRH类,并重写handle()函数。当有客户消息进来时,handle()函数就会被调用。StreamRequestHandler类支持像操作文件一样对套接字进行输入输出 #操作。通过readline()函数得到客户消息,write()函数把消息返回给客户。 class MyRequestHandler(SRH): def handle(self): print '...connect from:', self.client_address self.wfile.write('[%s] %s' % (ctime(), self.rfile.readline())) #利用主机信息和请求处理类来创建TCP服务器 tcpServ = TCP(ADDR, MyRequestHandler) print 'waiting for connection...' #无限循环,等待与处理客户请求 tcpServ.serve_forever()
客户端代码,client.py:
from socket import * HOST = 'localhost' PORT = 20123 BUFSIZ = 128 ADDR = (HOST, PORT) while True: client = socket(AF_INET, SOCK_STREAM) #由于SocketServer的请求处理器的默认行为是接受连接,得到请求,然后关闭连接。这使得程序在运行时不能一直保持连接状态,因此,每次发送数据前都要 创建一个新的套接字 client.connect(ADDR) data = raw_input('>') if not data: break #由于服务器端的处理器类像文件一样操作套接字,所以每次都要发送行结束符(回车与换行)。服务器保留并重用客户端发送的行结束符。当从服务器端得到数据 时,使用strip()函数去掉它们 client.send('%s\r\n' % data) data = client.recv(BUFSIZ) if not data: break print data.strip() client.close()
相关文章推荐
- [python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
- 【python网络编程】TCP套接字
- python网络编程之TCP通信实例和socketserver框架使用例子
- Python网络编程之TCP与UDP协议套接字用法示例
- python网络编程之TCP通信实例和socketserver框架使用例子
- TCP套接字网络编程实例(二)
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
- python网络编程之TCP通信实例和socketserver框架使用例子
- Python网络编程之TCP套接字简单用法示例
- python网络编程之TCP通信实例和socketserver框架使用例子
- python网络编程之TCP通信实例和socketserver框架
- UDP,TCP的套接字编程的Python实现
- 网络编程之套接字(tcp)
- 网络 套接字编程 TCP、UDP
- python之高性能网络编程并发框架eventlet实例 推荐
- Linux网络编程:原始套接字编程及实例分析(二)
- python网络编程之tcp服务器和客户端
- Python网络编程 4.1 主机名与套接字
- 网络 套接字编程 TCP、UDP
- 抓包、python网络编程之tcp、udp例子