python twisted TCP通信 脚本

-------------------server-------------------

!/usr/bin/python

coding=utf-8

from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor

clients=[]

class Spreader(Protocol):

def init(self,factory):
self.factory=factory

def connectionMade(self):
self.factory.numProtocols+=1
self.transport.write("欢迎,你是第{}客户".format(self.factory.numProtocols).encode("utf-8"))
clients.append(self)

def connectionLost(self,reason):
self.factory.numProtocols-=1
clients.remove(self)
print("lost connect: %d" % (self.factory.numProtocols))

def dataReceived(self,data):
if data=="close":
self.transport.lostConnection()
for client in clients:
if client!=self:
client.transport.write(data.encode("utf-8"))
else:
print(data)

class SpreadFactory(Factory):

def init(self):
self.numProtocols=0

def buildProtocol(self,addr):
return Spreader(self)

endpoint=TCP4ServerEndpoint(reactor,8007)
endpoint.listen(SpreadFactory())
reactor.run()

-------------------------------------------------client------------------------

!/usr/bin/python

coding=utf-8

from twisted.internet.protocol import Protocol, ClientFactory
from twisted.internet import reactor
import threading
import time
import sys
import datetime

class Echo(Protocol):
def init(self):
self.connected = False

def connectionMade(self):
    self.connected = True

def connectionLost(self, reason):
    self.connected = False

def dataReceived(self, data):
    print(data.decode("utf-8"))

class EchoClientFactory(ClientFactory):
def init(self):
self.protocol = None

def startedConnecting(self, connector):
    print("Start to Connect...")

def buildProtocol(self, addr):
    print("Connected...")
    self.protocol = Echo()
    return self.protocol

def clientConnectionLost(self, connector, reason):
    print("Lost connection. Reason: ", reason)

def clientConnectionFailed(self, connector, reason):
    print("Connection is failed, Reason: ", reason)

bStop = False

def routine(factory):
while not bStop:
if factory.protocol and factory.protocol.connected:
factory.protocol.transport.write("hello, I'm {} {} ".format(
sys.argv[0], datetime.datetime.now()
).encode("utf-8"))
print(sys.argv[0], datetime.datetime.now())
time.sleep(5)

host = '127.0.0.1'
port = 8007
factory = EchoClientFactory()
reactor.connectTCP(host, port, factory)
threading.Thread(target=routine, args=(factory,)).start()
reactor.run()
bStop = True

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 开发环境 1.Visual Studio Code 安装python extension,我使用的本地python...
    无锋天随子阅读 2,921评论 0 0
  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,170评论 0 6
  • 转载:作者:dave@http://krondo.com/slow-poetry-and-the-apocalyp...
    SkTj阅读 1,558评论 0 1
  • 本文章通过实际例子和用Twisted实现一个类似QQ那样的聊天室来逐步学习Twisted 一、稍微来点基础 首先,...
    东皇Amrzs阅读 4,891评论 3 7
  • 转载:作者:dave@http://krondo.com/slow-poetry-and-the-apocalyp...
    SkTj阅读 595评论 0 0