TCP多线程服务器

来源:互联网 发布:风鸣网络 编辑:程序博客网 时间:2024/06/05 05:41

两种版本分别应用两种不同的子线程实现方式
版本一

import socketimport threadingdef func(tcp_socket):    while True:        # 接收信息        cilent_socket, cilent_addr = tcp_socket.accept()        print("接收到来自%s的信息" % str(cilent_addr))        file_name = cilent_socket.recv(1024)        a = input()        try:            file = open(file_name, "rb")            while True:                data = file.readline()                if data:                    cilent_socket.send(data)                else:                    break        except Exception as error:            print("文件不存在")        else:            file.close()            print("已发送文件")            break        cilent_socket.close()def main():    # 创建套接字    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    # 设置套接字选项 套接字 选项 重用地址 1代表设置 0代表取消    tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)    # 绑定端口    tcp_socket.bind(("", 8888))    # 监听    tcp_socket.listen(128)    for i in range(100):        i = threading.Thread(target=func, args=(tcp_socket,))        i.start()if __name__ == '__main__':    main()

版本二

import socketimport threadingtcp_socket = Noneclass MyThread(threading.Thread):    global tcp_socket    def run(self):        while True:            # 接收信息            cilent_socket, cilent_addr = tcp_socket.accept()            print("接收到来自%s的信息" % str(cilent_addr))            file_name = cilent_socket.recv(1024)            try:                file = open(file_name, "rb")                while True:                    data = file.readline()                    if data:                        cilent_socket.send(data)                    else:                        break            except Exception as error:                print("文件不存在")            else:                file.close()                print("已发送文件")                break            cilent_socket.close()if __name__ == '__main__':    # 创建套接字    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    # 设置套接字    tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)    # 绑定 ip 端口    tcp_socket.bind(("", 8888))    # 监听listen    tcp_socket.listen(128)    for i in range(100):        i = MyThread()        i.start()