python 网络编程详解及简单实例

发布时间 - 2026-01-11 00:49:55    点击率:

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的基本使用方法实例分析  # 客户端  # 也就  # 两种  # 知道了  # 不太  # 其他的  # 这句话  # 希望能  # 说得  # 大同小异  # 种方法  # 发送到  # 谢谢大家  # 这两种  # 来实现  # 就在于  # 在我看来  # 说成  # 服务端 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: node.js报错:Cannot find module 'ejs'的解决办法  长沙企业网站制作哪家好,长沙水业集团官方网站?  浅谈Javascript中的Label语句  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  JavaScript实现Fly Bird小游戏  Java垃圾回收器的方法和原理总结  详解Oracle修改字段类型方法总结  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel观察者模式如何使用_Laravel Model Observer配置  活动邀请函制作网站有哪些,活动邀请函文案?  如何快速生成橙子建站落地页链接?  智能起名网站制作软件有哪些,制作logo的软件?  javascript日期怎么处理_如何格式化输出  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  微信小程序 input输入框控件详解及实例(多种示例)  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  如何用y主机助手快速搭建网站?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  如何在建站宝盒中设置产品搜索功能?  如何快速重置建站主机并恢复默认配置?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何在建站之星网店版论坛获取技术支持?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  用yum安装MySQLdb模块的步骤方法  Thinkphp 中 distinct 的用法解析  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  iOS正则表达式验证手机号、邮箱、身份证号等  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  nodejs redis 发布订阅机制封装实现方法及实例代码  香港服务器租用费用高吗?如何避免常见误区?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  php485函数参数是什么意思_php485各参数详细说明【介绍】  Android实现代码画虚线边框背景效果  如何在Windows服务器上快速搭建网站?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel怎么使用Intervention Image库处理图片上传和缩放  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  如何在不使用负向后查找的情况下匹配特定条件前的换行符  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel如何使用withoutEvents方法临时禁用模型事件  如何在Tomcat中配置并部署网站项目?  Laravel如何使用Livewire构建动态组件?(入门代码)  如何用虚拟主机快速搭建网站?详细步骤解析  javascript读取文本节点方法小结  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)