• 使用socket实现简单聊天室


    通过socket实现简单的聊天室

    1、服务端代码:serverselect.py

    #!/usr/bin/env python 
    #coding:utf8
    import  socket
    
    import select
    
    
    class SelectServer(object):
        def __init__(self,host,port,backlog):
            self.host = host
            self.prot = port
            self.address = (host,port)
            self.backlog = backlog
            socket.server = None
            self.socketList = list()
    
        def _initSocket(self):
            self.server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            self.server.bind(self.address)
            self.server.listen(self.backlog)
            self.socketList.append(self.server)
            print("chat room has start")
            while 1 :
                rlist,wlist ,elist = select.select(self.socketList,[],[])
                for r in rlist:
                    if r == self.server:
                        ServrtConn,clientAddr = self.server.accept()
                        self.socketList.append(ServrtConn)
                        print("{0}进入房间".format(clientAddr))
                        self.broadcast(r,"{0}进入房间".format(clientAddr))
                    else:
                        try:
                            data = r.recv(2048)
                            if data:
                                self.broadcast(r, "{0}:{1}".format(clientAddr, ServrtConn))
                                print("{0} say:{1}".format(clientAddr,data))
                        except Exception as e:
                            self.broadcast(r, "{0}  下线".format(clientAddr))
                            print("{0}下线".format(clientAddr))
                            r.close()
                            self.socketList.remove(r)
    
        def broadcast(self,r,data):
            for i in self.socketList:
                if i != r  and i != self.server:
                    try:
                        i.sendall(data)
                    except Exception as e :
                        i.close()
                        self.socketList.remove(i)
    def main():
        selectServer = SelectServer(host="192.168.88.100",port=4321,backlog=5)
        selectServer._initSocket()
    if __name__ == "__main__":
        main()
    

      2、客户端代码:clientselect.py

    #!/usr/bin/env python 
    #coding:utf8
    
    import  socket,select,string,sys
    import  time
    
    if __name__ == "__main__":
        host = "192.168.88.100"
        port = 4321
        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')
    
        while 1 :
            rlist = [sys.stdin,s]
            read_list, write_list, error_list = select.select(rlist, [], [])
            for sock in read_list:
                if sock == s :
                    data = sock.recv(2048)
                    if not data :
                        continue
                    else:
                        sys.stdout.write(data)
                else:
                    msg = raw_input("i say:")
                    # print(msg)
                    s.sendall(msg)
    

      运行结果:

    服务端:

    客户端:

    服务端收到客户端的请求:

  • 相关阅读:
    【Java面试题】52 java中会存在内存泄漏吗,请简单描述。
    【Java面试题】51 什么时候用assert。
    JS 生成GUID 方法
    最全html5 meta设置详解 (转)
    前端开发工程师 调试方法合集
    [超级懒人最简单法]iPhone 6 plus 适配切图方法分享(转载文章)
    H5移动前端开发常用高能css3汇总
    前端性能监控方案window.performance 调研(转)
    微信浏览器取消缓存的方法
    H5移动APP开发 细节详解(转)
  • 原文地址:https://www.cnblogs.com/pythonlx/p/8227901.html
Copyright © 2020-2023  润新知