六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 1703|回复: 0

Python socket C/S结构的聊天室应用

[复制链接]
 楼主| 发表于 2014-11-21 12:11:02 | 显示全部楼层 |阅读模式
        Python socket C/S结构的聊天室应用
        服务端:
#!/usr/bin/env python#coding:utf8import socket,selectdef broadcast_data (sock,message):    for socket in conn_list:        if socket != server_socket and socket != sock :            try :                socket.send(message)            except :                socket.close()                conn_list.remove(socket)if __name__ == "__main__":    conn_list = []    recv_buffer = 4096    PORT = 9999    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #端口重用,可选    server_socket.bind(('', PORT))    server_socket.listen(99)    conn_list.append(server_socket)    print "Chat server started on port " + str(PORT)    while 1:        read_sockets,write_sockets,error_sockets = select.select(conn_list,[],[])        for sock in read_sockets:            #新建连接            if sock == server_socket:                sockfd, addr = server_socket.accept()                conn_list.append(sockfd)                print "Client (%s, %s) connected" % addr                broadcast_data(sockfd, "[%s:%s] entered room\n" % addr)            #进入聊天室            else:                try:                    data = sock.recv(recv_buffer)                    if data:                        broadcast_data(sock, "\r" + '<' + str(sock.getpeername()) + '> ' + data)                except:                    broadcast_data(sock, "Client (%s, %s) is offline" % addr)                    print "Client (%s, %s) is offline" % addr                    sock.close()                    conn_list.remove(sock)                    continue    server_socket.close()客户端:
#!/usr/bin/env python#coding:utf8import socket,select,string,sysdef prompt() :    sys.stdout.write('<You> ')    sys.stdout.flush()if __name__ == "__main__":    if(len(sys.argv) < 3) :        print 'Usage : python chat_client.py hostname port'        sys.exit()    HOST = sys.argv[1]    PORT = int(sys.argv[2])    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    s.settimeout(2)    try :        s.connect((HOST, PORT))    except :        print 'Unable to connect'        sys.exit()    print 'Connected to remote host. Start sending messages'    prompt()    while 1:        socket_list = [sys.stdin, s]        read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])        for sock in read_sockets:            if sock == s:                data = sock.recv(4096)                if not data :                    print '\nDisconnected from chat server'                    sys.exit()                else :                    sys.stdout.write(data)                    prompt()            else :                msg = sys.stdin.readline()                s.send(msg)                prompt()
        Thu Jul  4 17:24:20 CST 2013
摘自:http://blog.linuxeye.com/339.html

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表