python聊天室_Python聊天室源码,记录

从网上找下来的Python聊天室源码, 收集了两个,  两个Python聊天室源码修正了一些错误,试验过来,都能用的, 记录下来。

两个都是可以用telnet登录的, 命令: telnet 服务器ip  8080 ,  windows里就在开始=>运行里输入,linux等系统就在终端输入.

好久没有玩过聊天室了,不过这些Python聊天室源码可以作为Python学习材料, 不错的.

代码一

#!/usr/local/python

#-*- encoding:gb2312 -*-

from twisted.internet import protocol

from twisted.protocols import basic

from twisted.python import log

from twisted.internet import reactor

import sys

class ConfigServer(basic.LineReceiver):

def __init__(self):

pass

def lineReceived(self, line):

if line == ‘quit’:

self.sendLine(“Goodbye.”)

self.transport.loseConnection()

else:

self.broadcast(line)

def broadcast(self, msg):

for client in self.factory.clients:

client.sendLine(“%s said: %s” % (self.transport.getPeer().host,msg) );

def connectionMade(self):

self.factory.clients.append(self)

print “Connect from %s..” % self.transport.getHost()

self.sendLine(“Welcome…%s” % self.transport.getHost())

def connectionLost(self, reason):

self.factory.clients.remove(self)

# self.sendLine(“Disconnect…%s” % self.transport.getHost())

pass

class ConfigServerFactory(protocol.ServerFactory):

protocol = ConfigServer

clients = []

def main():

log.startLogging(sys.stdout)

reactor.listenTCP(8080,ConfigServerFactory())

reactor.run()

if __name__ == ‘__main__’:

main()

代码2

import socket

import select

class ChatServer:

def __init__( self, port ):

self.port = port;

self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )

self.srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )

self.srvsock.bind( (“192.168.0.25″, port) )

self.srvsock.listen( 5 )

self.descriptors = [self.srvsock]

print ‘ChatServer started on port %s’ % port

def run( self ):

while 1:

# Await an event on a readable socket descriptor

(sread, swrite, sexc) = select.select( self.descriptors, [], [] )

# Iterate through the tagged read descriptors

for sock in sread:

# Received a connect to the server (listening) socket

if sock == self.srvsock:

self.accept_new_connection()

else:

# Received something on a client socket

str = sock.recv(100)

# Check to see if the peer socket closed

if str == ”:

host,port = sock.getpeername()

str = ‘Client left %s:%s\r\n’ % (host, port)

self.broadcast_string( str, sock )

sock.close

self.descriptors.remove(sock)

else:

host,port = sock.getpeername()

newstr = ‘[%s:%s] %s’ % (host, port, str)

self.broadcast_string( newstr, sock )

def accept_new_connection( self ):

newsock, (remhost, remport) = self.srvsock.accept()

self.descriptors.append( newsock )

newsock.send(“You’re connected to the Python chatserver\r\n”)

str = ‘Client joined %s:%s\r\n’ % (remhost, remport)

self.broadcast_string( str, newsock )

def broadcast_string( self, str, omit_sock ):

for sock in self.descriptors:

if sock != self.srvsock and sock != omit_sock:

sock.send(str)

print str,

myServer = ChatServer( 8080 ).run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值