用Python实现一个简单的多线程TCP服务器的教程

最近看《python核心编程》,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程。

其实python在类的设计上已经考虑到了这一方面的需求,我们只要在自己的server上继承一下SocketServer.BaseRequestHandler就可以了。
server端代码如下:

#!/usr/bin/env python
import SocketServer
from time import ctime
HOST = ''
PORT = 21567
ADDR = (HOST, PORT)
class MyRequestHandler(SocketServer.BaseRequestHandler):
  def handle(self):
    print '...connected from:', self.client_address
    while True:
      self.request.sendall('[%s] %s' % (ctime(),self.request.recv(1024)))
tcpServ = SocketServer.ThreadingTCPServer(ADDR, MyRequestHandler)
print 'waiting for connection...'
tcpServ.serve_forever()

客户端代码如下(基本和书中一模一样,只是把循环中的关闭链接注释掉了):

#!/usr/bin/env python
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
while True:
  tcpCliSock = socket(AF_INET, SOCK_STREAM)
  tcpCliSock.connect(ADDR)
  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()

从客户端的代码可以看出,每次输入都会建立一次新的请求。
测试一下,启动server和client之后,在client中输入测试:

(0)

相关推荐

  • python实现TCP服务器端与客户端的方法详解

    本文实例讲述了python实现TCP服务器端与客户端的方法.分享给大家供大家参考.具体如下: TCP服务器程序(tsTserv.py): from socket import * from time import ctime HOST = '' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.liste

  • 用Python进行TCP网络编程的教程

    Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 大多数连接都是可靠的TCP连接.创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器. 举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接.如果一切顺利,新浪的服务器接受了我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了. 所

  • 使用python实现tcp自动重连

    操作系统: CentOS 6.9_x64 python语言版本: 2.7.13 问题描述 现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连. 测试服务器示例代码: https://github.com/mike-zhang/pyExamples/blob/master/socketRelate/tcpServer1_multithread.py 解决方案 ''' tcp client with reconnect E-Mail : Mike_Zhang@

  • python检测远程服务器tcp端口的方法

    本文实例讲述了python检测远程服务器tcp端口的方法.分享给大家供大家参考.具体如下: python检测远程服务器tcp端口的代码,这段代码可以用来做服务器监控实用 #!/usr/bin/env python #coding:utf-8 #filename:tcp.py ''' author: gavingeng date: 2011-12-14 09:35:59 ''' import socket import sys NORMAL=0 ERROR=1 TIMEOUT=5 def ping

  • python实现简单的TCP代理服务器

    本文实例讲述了python实现简单的TCP代理服务器的方法,分享给大家供大家参考. 具体实现代码如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @desc: 利用python的socket端口转发,用于远程维护 如果连接不到远程,会sleep 36s,最多尝试200(即两小时) @usage: ./rtcp.py stream1 stream2 stream为:l:port或c:host:port l:port表示监听指定的本地端口 c:host

  • Python采用socket模拟TCP通讯的实现方法

    本文实例讲述了Python采用socket模拟TCP通讯的实现方法.分享给大家供大家参考.具体实现方法如下: 对于TCP server端的创建而言,分为如下几个步骤: 创建socket对象(socket):其中两个参数分别为Address Family(如AF_INET为IPV4,AF_INET6为IPV6,AF_UNIX为UNIX域协议族).socket类型(如SOCK_STREAM为TCP,SOCK_DGRAM为UDP). 绑定服务器地址(bind):参数为服务器地址二元组. 监听(list

  • 用Python实现一个简单的多线程TCP服务器的教程

    最近看<python核心编程>,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程. 其实python在类的设计上已经考虑到了这一方面的需求,我们只要在自己的server上继承一下SocketServer.BaseRequestHandler就可以了. server端代码如下: #!/usr/bin/env python import SocketServer from t

  • python实现一个简单RPC框架的示例

    本文需要一点Python socket基础. 回顾RPC 客户端(Client):服务调用方. 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端. 服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理. 服务端(Server):服务的真正提供者. Network Service:底层传输,可以是 TCP 或 HTTP. 实现jsonrpc 在实现前,简单理一下整体思路

  • Python实现一个简单的验证码程序

    老师讲完random函数,自己写的,虽然和老师示例的不那么美观,智能,但是也自己想出来的,所以记录一下,代码就需要自己不断的自己练习,实战,才能提高啊!不然就像我们这些大部分靠自学的人,何时能学会.还有就是,这次听老师的,把自己的代码添加注释,所以这次把很简单的代码都写上了注释,而且很大白话,不管有没有接触过python的,我相信仔细看了,肯定能看懂.如果看完,再自己尝试着默写出来,那就是更好到了,好了进入正题: 自己写的: __Author__ = "Zhang Peng" impo

  • Python实现一个简单的MySQL类

    本文实例讲述了Python实现一个简单的MySQL类.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- # Created on 2011-2-19 # @author: xiaoxiao import MySQLdb import sys __all__ = ['MySQL'] class MySQL(object):     '''     MySQL     '''     conn

  • python实现一个简单的并查集的示例代码

    并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题.常常在使用中以森林来表示. 并查集有三种基本操作,获得根节点,判断两节点是否连通,以及将两不连通的节点相连(相当于将两节点各自的集合合并) 用UnionFind类来表示一个并查集,在构造函数中,初始化一个数组parent,parent[i]表示的含义为,索引为i的节点,它的直接父节点为parent[i].初始化时各个节点都不相连,因此初始化parent[i]=i,让自己成为自己的父节点,从而实现各节点不互连. def __ini

  • 如何利用Python开发一个简单的猜数字游戏

    前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(high)"还是"小(low)",如此往复直到玩家猜对数字. 准备好Python3 首先,需要在计算机上安装Python.可以从Python官网下载并安装.本教程需要使用最新版的Python 3(版本3.x.x). 确保选中将Python添加到PATH变量的框.如果不这样做,将很难运行该程序.

  • python实现一个简单的ping工具方法

    继上一篇计算checksum校验和,本章通过socket套接字,struct字节打包成二进制,select返回套接字的文件描述符的结合,实现一个简单的ping工具. #!/usr/bin/python3.6.4 #!coding:utf-8 __author__ = 'Rosefinch' __date__ = '2018/5/31 22:27' import time import struct import socket import select import sys def chesks

  • Python实现一个简单的毕业生信息管理系统的示例代码

    写在前面: 从昨晚的梦里回忆起数据管理的作业: 实现一个自己的选题---- 毕业生信息管理系统,实现学生个人信息基本的增删改查, 我想了想前段时间刚学习的列表,这个简单啊 ,设计一个学生信息列表,然后列表里面再存每个学生详细信息的列表,然后来实现一个基本的增删查改,这个不难啊!直接开始撸代码! 上代码! def Menu():##菜单主界面 print('*'*22) print("* 查看毕业生列表输入: 1 *") print("* 添加毕业生信息输入: 2 *"

  • Python实现一个简单的递归下降分析器

    问题 你想根据一组语法规则解析文本并执行命令,或者构造一个代表输入的抽象语法树. 如果语法非常简单,你可以不去使用一些框架,而是自己写这个解析器. 解决方案 在这个问题中,我们集中讨论根据特殊语法去解析文本的问题. 为了这样做,你首先要以BNF或者EBNF形式指定一个标准语法. 比如,一个简单数学表达式语法可能像下面这样: expr ::= expr + term     |   expr - term     |   term term ::= term * factor     |   te

  • python制作一个简单的gui 数据库查询界面

    一.准备工作: 1.安装mysql3.7,创建一个test数据库,创建student表,创建列:(列名看代码),创建几条数据 (以上工作直接用navicat for mysql工具完成) 二.代码: import sys import tkinter as tk import mysql.connector as sql #--------------------查询函数--------------------------- def sql_connect(): listbox_show.del

随机推荐