python 网络编程详解

网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、Java等)所实现的符合自身特性的语法都大同小异。在我看来,懂得了Unix的socket网络编程,其他的形式的网络编程方法也就知道了。这句话说得还不太严谨。准确的应该说成懂得了socket编程的原理,网络编程也就知道了,不同之处就在于每个平台,每个语言都有自己专享的语法,我们直接灵活套用就行了。
下面是用python实现的最基本的网络编程的例子,即依托于客户端-服务器的架构,实现客户端与服务器之间的单向“数据流通”。我们分别用两个方法来实现,一个方法是最原始的socket编程,另一个方法是利用python的面向对象对第一种方法进行封装实现,目的是减少实现透明性,便于快速开发。
要求:客户端输入数据,发送到服务端,服务器端生成(时间戳+数据)的封装数据回应客户端。由于socket编程包括两种:面向连接的和无连接的,这两种分别对应TCP数据流和UDP数据报文。所以,我们两种方法都进行实现。
一、Python socket编程
面向连接的TCP socket编程:
# -*- coding: utf-8 -*-
3 from socket import *
from time import ctime
# Address and Port
HOST = ''
PORT = 21567
ADDR = (HOST, PORT)
# BuffSize
BUFSIZ = 1024
# build socket
tcpSerSock = socket(AF_INET, SOCK_STREAM)
# bind socket
tcpSerSock.bind(ADDR)
# listen 5 client
tcpSerSock.listen(5)
try:
while True:
print 'waiting for connection...'
# build client socket
tcpCliSock, addr = tcpSerSock.accept()
print '...connect from:', addr
# accept data and process
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' % (ctime(), data))
# close client socket
tcpCliSock.close()
except EOFError, KeyboardInterrupt:
tcpSerSock.close()
# -*- coding:utf-8 -*-
from socket import *
# Address and Port
HOST = '127.0.0.1'
PORT = 21567
ADDR = (HOST, PORT)
# BufferSize
BUFSIZ = 1024
#build socket
tcpCliSocket = socket(AF_INET, SOCK_STREAM)
tcpCliSocket.connect(ADDR)
while True:
data = raw_input('> ')
if not data:
break
# send data
tcpCliSocket.send(data)
# recv data
data = tcpCliSocket.recv(BUFSIZ)
if not data:
break
# show data
print data
tcpCliSocket.close()
无连接的UDP socket编程
# -*- coding: utf-8 -*-
from socket import *
from time import ctime
# Address and Port
HOST = ''
PORT = 8000
ADDR = (HOST, PORT)
# BufferSize
BUFFSIZE = 1024
# build socket
udpSerSock = socket(AF_INET, SOCK_DGRAM)
# bind socket
udpSerSock.bind(ADDR)
try:
while True:
print 'waiting the message...'
data, addr = udpSerSock.recvfrom(BUFFSIZE)
print 'received the message: '+data+' from: ', addr
udpSerSock.sendto('[%s] %s' % (ctime(), data), addr)
except EOFError, KeyboardInterrupt:
udpSerSock.close()
# -*- coding: utf-8 -*-
from socket import *
# Address and Port
HOST = 'localhost'
PORT = 8000
ADDR = (HOST, PORT)
# BufferSize
BUFSIZ = 1024
# build socket
udpCliSock = socket(AF_INET, SOCK_DGRAM)
while True:
data = raw_input('> ')
udpCliSock.sendto(data, ADDR)
data = udpCliSock.recvfrom(BUFSIZ)
if not data:
break
print data
udpCliSock.close()
二、基于封装类SocketServer的网络编程
# -*- coding: utf-8 -*-
from SocketServer import TCPServer as TCP, StreamRequestHandler as SRH
from time import ctime
# Address and Port
HOST = ''
PORT = 21567
ADDR = (HOST, PORT)
# BuffSize
BUFSIZ = 1024
# build RequestHandler
class MyRequestHandler(SRH):
def handle(self):
print '...connected from: ', self.client_address
self.wfile.write('[%s] %s' % (ctime(), self.rfile.readline()))
# build TCPServer
TCPServ = TCP(ADDR, MyRequestHandler)
print 'waiting for connection...'
# loop to process
TCPServ.serve_forever()
# -*- coding:utf-8 -*-
from socket import *
# Address and Port
HOST = '127.0.0.1'
PORT = 21567
ADDR = (HOST, PORT)
# BufferSize
BUFSIZ = 1024
while True:
# note: SocketServer 的请求处理器的默认行为是接受连接,
# 得到请求,然后就关闭连接,所以需要多次连接
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
# process data
data = raw_input('> ')
if not data:
break
tcpCliSock.send('%s\r\n' % data)
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print data.strip()
tcpCliSock.close()
感谢阅读,希望能帮助大家,谢谢大家对本站的支持!
# python
# 网络编程
# 网络编程详解
# python网络编程之TCP通信实例和socketserver框架使用例子
# python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
# Python 网络编程起步(Socket发送消息)
# python socket网络编程步骤详解(socket套接字使用)
# Python 网络编程说明
# 用Python进行TCP网络编程的教程
# python网络编程调用recv函数完整接收数据的三种方法
# python网络编程实例简析
# Python网络编程中urllib2模块的用法总结
# python网络编程:socketserver的基本使用方法实例分析
# 客户端
# 也就
# 两种
# 知道了
# 不太
# 其他的
# 这句话
# 希望能
# 说得
# 大同小异
# 种方法
# 发送到
# 谢谢大家
# 这两种
# 来实现
# 就在于
# 在我看来
# 说成
# 服务端
相关文章:
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何用免费手机建站系统零基础打造专业网站?
如何确保FTP站点访问权限与数据传输安全?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
学校为何禁止电信移动建设网站?
如何登录建站主机?访问步骤全解析
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何快速搭建自助建站会员专属系统?
如何快速搭建高效可靠的建站解决方案?
Swift中switch语句区间和元组模式匹配
建站之星后台管理:高效配置与模板优化提升用户体验
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
制作网站怎么制作,*游戏网站怎么搭建?
如何快速查询网站的真实建站时间?
建站之星在线客服如何快速接入解答?
安徽网站建设与外贸建站服务专业定制方案
南京网站制作费用,南京远驱官方网站?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
建站VPS选购需注意哪些关键参数?
建站之星安装需要哪些步骤及注意事项?
实例解析Array和String方法
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何彻底删除建站之星生成的Banner?
c# 在ASP.NET Core中管理和取消后台任务
建站之星如何一键生成手机站?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
建站主机选购指南:核心配置优化与品牌推荐方案
为什么Go需要go mod文件_Go go mod文件作用说明
如何选择网络建站服务器?高效建站必看指南
香港服务器建站指南:免备案优势与SEO优化技巧全解析
网站制作的步骤包括,正确网址格式怎么写?
建站之星各版本价格是多少?
做企业网站制作流程,企业网站制作基本流程有哪些?
建站之星安装后如何配置SEO及设计样式?
建站VPS配置与SEO优化指南:关键词排名提升策略
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
大连网站制作公司哪家好一点,大连买房网站哪个好?
家庭服务器如何搭建个人网站?
建站主机如何选?性能与价格怎样平衡?
建站之星24小时客服电话如何获取?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
c++怎么用jemalloc c++替换默认内存分配器【性能】
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
javascript中对象的定义、使用以及对象和原型链操作小结
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
*请认真填写需求信息,我们会在24小时内与您取得联系。