• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python socket多线程实现客户端与服务器连接

    python socket多线程实现客户端与服务器连接,供大家参考,具体内容如下

    之前因为一些作业需要完成一个服务器监听多个客户端的程序,于是就用python写了这样的程序。话不多说,直接上代码。

    server代码:

    import json
    import socket
    import threading
    import time
    import struct
    
    class Server():
        def __init__(self):
            self.g_conn_pool = {}  # 连接池
            # 记录客户端数量
            self.num =0
            # 服务器本地地址
            self.address = ('0.0.0.0', 8000)
            # 初始化服务器
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            self.server_socket.bind(self.address)
            self.server_socket.listen(128)
        def accept_client(self):
            """
                接收新连接
                """
            while True:
                client_socket, info = self.server_socket.accept()  # 阻塞,等待客户端连接
                print(client_socket,port)
                # 给每个客户端创建一个独立的线程进行管理
                thread = threading.Thread(target=self.recv_msg, args=(client_socket,info))
                thread.setDaemon(True)
                thread.start()
        def recv_msg(self,client,info):
            # 提示服务器开启成功
            print('服务器已准备就绪!')
            client.sendall("connect server successfully!".encode(encoding='utf8'))
            # 持续接受客户端连接
            while True:
                try:
                    client.sendall(b'Success')
                    while True:
                        msg = client.recv(1024)
                        msg_recv = msg.decode('utf-8')
                        if not msg_recv:
                            continue
                        else:
                            recv_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                            print('客户端 ' + recv_time + ':\n')
                            print(' ' + msg_recv + '\n')
                except Exception as e:
    
                    print('客户端断开连接...')
                    exit(-1)
                    break
        def start_new_thread(self):
            """启动新线程来接收信息"""
            thread = threading.Thread(target=self.accept_client, args=())
            thread.setDaemon(True)
            thread.start()

    server服务器类,主要是监听以及接收客户端的信息。

    #实例化一个Flask节点
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello():
        return 'hello'
    
    
    if __name__ == '__main__':
     #创建解析器
        from argparse import ArgumentParser
        parser = ArgumentParser()
        parser.add_argument('-p', '--port', default=5030, type=int, help='port to listen on')
        args = parser.parse_args()
        #获取端口号
        port = args.port
        #实例化一个server类 并启动
        py_server = Server()
        py_server.start_new_thread()
        #启动Flask节点
        app.run(host='127.0.0.1',port=port)

    Client代码

    class Client():
    
        def __init__(self):
         #服务器ip与端口
            self.server_address = ('127.0.0.1', 8000)
            
            self.num = 0
        def recv_msg(self):
            print("正在连接服务器....")
    
            # 客户端连接服务器
            while True:
                try:
                    self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    #连接服务器
                    self.client_socket.connect(self.server_address)
    
                    num = self.num
    
                    # 制作报头
                    header_dic = {
                        'filename': num
                    }
                    header_bytes = json.dumps(header_dic).encode('utf-8')
                    self.client_socket.send(struct.pack('i', len(header_bytes)))
                    self.client_socket.send(header_bytes)
                    
        #接收信息
                    while True:
                        msg_recv = self.client_socket.recv(1024).decode('gbk')
                        print(msg_recv)
    
                        if msg_recv == 'Success':
                            print('客户端已与服务器成功建立连接...')
                        elif not msg_recv:
                            continue
                        else:
                            recv_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                            print( '服务器 ' + recv_time + ':\n')
                            print(' ' + msg_recv + '\n')
    
                except:
                    print('与服务器断开连接...')
                    break
        def start_new_thread(self):
            """启动新线程来接收信息"""
            thread = threading.Thread(target=self.recv_msg, args=())
            thread.setDaemon(True)
            thread.start()
            
    def main():
        wf = Client()
        wf.start_new_thread()
     while True:
            a = input()
            wf.client_socket.send(a.encode('utf-8'))
    
    if __name__ == '__main__':
    
        main()

    以上为客户端程序的代码。

    下面是运行的结果:

    服务器端:

    多个客户端:

    代码实现还是蛮容易的,具体可以自行修改使用。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • Python3 SSH远程连接服务器的方法示例
    • python远程连接服务器MySQL数据库
    • 详解Python程序与服务器连接的WSGI接口
    • python使用socket连接远程服务器的方法
    上一篇:python简单实现图片文字分割
    下一篇:python使用opencv切割图片白边
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python socket多线程实现客户端与服务器连接 python,socket,多,线程,实现,