python核心编程,使用了twisted.internet类创建一个简单的半双工聊天程序

Server部分:

'''
Created on 2018年5月6日
一个时间戳TCP服务器,他使用了twisted.internet类
@author: Administrator
'''
from twisted.internet import protocol,reactor
from time import ctime
from hexinbiancheng.utils.tsTclntEntity import Tserver


PORT = 21567


# ts = Tserver()
# HOST = ts.host
# PORT = ts.port


class TSServProtocol(protocol.Protocol):
    def sendData(self):
        data = input('> ')
        if data:
            #print('...sending %s...' % data)
            self.transport.write(data.encode())
            print('我说: ' + ('[%s] %s' % (ctime(), data)))
        else:
            self.transport.loseConnection()
#     def connectionMade(self):
#         data = None
#         if not data:
#             """发送数据"""
#             self.sendData()
#         
#         """打印连接信息"""
        #clnt = self.clnt = self.transport.getPeer().host
        #print('Server...connected from :', clnt)
    def dataReceived(self, data):
        if data:
            #data有值
            """处理数据并返回给请求方"""
            #self.transport.write(('[%s] %s' % (ctime(), data.decode())).encode())
            print('别人说: ' + ('[%s] %s' % (ctime(), data.decode())))
            
            self.sendData()
        else:
            #data为None
            """发送数据"""
            #print('Server' + data.decode())
            self.sendData()


class TSClntFactory(protocol.ClientFactory):
    protocol = TSServProtocol
    clientConnectionLost = clientConnectionFailed = \
        lambda self, connector, reason: reactor.stop()
        
"""客户端创建连接协议对象"""        
#reactor.connectTCP(HOST, PORT, TSClntFactory())


"""服务端创建连接协议对象""" 
factory = protocol.Factory()
factory.protocol = TSServProtocol
print('服务端waiting for connection...')
reactor.listenTCP(PORT, factory)

reactor.run()

Client部分:

'''
Created on 2018年5月6日
这个脚本创建一个TCP客户端,它提示用户输入发送到服务器端的消息,并接收从服务器端返回的添加了时间戳前缀的相同消息,然后将结果展示给用户。
@author: Administrator
'''
from twisted.internet import protocol, reactor 
from hexinbiancheng.utils.tsTclntEntity import Tserver
from time import ctime


HOST = '127.0.0.1'
PORT = 21567


# ts = Tserver()
# HOST = ts.host
# PORT = ts.port


class TSClntProtocol(protocol.Protocol):
    
    #全局变量data,用来保存消息
    #data = ''
    def sendData(self):
        data = input('> ')
        if data:
            #print('...sending %s...' % data)
            self.transport.write(data.encode())
            print('我说: ' + ('[%s] %s' % (ctime(), data)))
        else:
            self.transport.loseConnection()
            
    def connectionMade(self):
        data = None
        if not data:
            """发送数据"""
            self.sendData()
        
        """打印连接信息"""
        #clnt = self.clnt = self.transport.getPeer().host
        #print('Client...connected from :', clnt)
        
    def dataReceived(self, data):
        if data:
            #data有值
            """处理数据并返回给请求方"""
            #self.transport.write(('[%s] %s' % (ctime(), data.decode())).encode())
            #print('Client: ' + data.decode())
            print('别人说: ' + ('[%s] %s' % (ctime(), data.decode())))
            self.sendData()
        else:
            #data为None
            """发送数据"""
            #print('Server' + data.decode())
            self.sendData()        
        
class TSClntFactory(protocol.ClientFactory):
    protocol = TSClntProtocol
    clientConnectionLost = clientConnectionFailed = \
        lambda self, connector, reason: reactor.stop()


"""客户端创建连接协议对象"""        
reactor.connectTCP(HOST, PORT, TSClntFactory())


# """服务端创建连接协议对象""" 
# factory = protocol.Factory()
# factory.protocol = TSClntProtocol
# print('客户端waiting for connection...')
# reactor.listenTCP(PORT, factory)


reactor.run()


猜你喜欢

转载自blog.csdn.net/beta_safe/article/details/80219917