iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >python socket多线程实现客户端与服务器连接
  • 323
分享到

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

2024-04-02 19:04:59 323人浏览 薄情痞子
摘要

python Socket多线程实现客户端与服务器连接,供大家参考,具体内容如下 之前因为一些作业需要完成一个服务器监听多个客户端的程序,于是就用Python写了这样的程序。话不多说

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()

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

下面是运行的结果:

服务器端:

多个客户端:

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

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

--结束END--

本文标题: python socket多线程实现客户端与服务器连接

本文链接: https://www.lsjlt.com/news/134677.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python socket多线程实现客户端与服务器连接
    python socket多线程实现客户端与服务器连接,供大家参考,具体内容如下 之前因为一些作业需要完成一个服务器监听多个客户端的程序,于是就用python写了这样的程序。话不多说...
    99+
    2024-04-02
  • C#实现Socket服务器及多客户端连接的方式
    服务端代码[控制台示例] static List<Socket> Sockets = new List<Socket>(); static v...
    99+
    2024-04-02
  • Java编程Socket如何实现多个客户端连接同一个服务端
    这篇文章主要介绍Java编程Socket如何实现多个客户端连接同一个服务端,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java Socket(套接字)通常也称作"套接字",用于描述IP地址和端口...
    99+
    2023-05-30
    java socket
  • Python中怎么实现服务端与客户端连接
    本篇内容主要讲解“Python中怎么实现服务端与客户端连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中怎么实现服务端与客户端连接”吧!服务端我们使用 socket 模块的&nbs...
    99+
    2023-06-08
  • python socket监测服务器和客户端连接状态
    服务器端和客户端的连接状态,应该是没有单独的函数返回或是接口监测的,看网上很多资料说需要监测心跳,这确实是一个普遍解决监测状态的办法,但是对我的项目却显得有些被动,其实对一般的项目包括我的,用try…...
    99+
    2023-09-08
    python 服务器 开发语言
  • 如何实现C#服务端与客户端连接
    今天就跟大家聊聊有关如何实现C#服务端与客户端连接,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#服务端与客户端连接实现的时间性:当服务器开始对端口侦听之后,便可以创建客户端与它建...
    99+
    2023-06-17
  • python套接字(二):实现一个服务器和多客户端连接
    文章目录 前言一、问题二、实现一个服务器连接多个客户端1、问题分析2、代码实现a、服务器端b、客户端 3、运行 前言 在上一篇博客python套接字(一):socket的使用简...
    99+
    2023-09-18
    python socket
  • Python基于socket实现TCP客户端和服务端
    目录一、基于socket实现的TCP客户端二、基于socket实现的TCP服务端三、socket实现的多任务版TCP服务端1、面向对象版本一、基于socket实现的TCP客户端 im...
    99+
    2024-04-02
  • C#中怎么实现服务端与客户端连接
    这篇文章将为大家详细讲解有关C#中怎么实现服务端与客户端连接,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#服务端与客户端连接实现实例:class Client {&n...
    99+
    2023-06-17
  • php使用workman框架实现socket服务以及连接客户端
    1. 解决什么问题,为什么要用workman  socket服务    都知道游戏安装包很大,渠道推广时,需要对游戏进行分包处理,而PHP命...
    99+
    2024-04-02
  • ​Golang 实现客户端与服务器端UDP协议连接通讯
    我们先说一下UDP的概念和作用 UDP是用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一...
    99+
    2023-06-04
  • Golang 实现客户端与服务器端UDP协议连接通讯
    我们先说一下UDP的概念和作用 UDP是用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一...
    99+
    2023-06-05
  • Socket结合线程池使用实现客户端和服务端通信demo
    目录引导语1、要求2、客户端代码3、服务端代码3.1、对客户端请求进行控制3.2、服务端任务的处理逻辑4、测试5、总结引导语 Socket 面试最终题一般都是让你写一个简单的客户端和...
    99+
    2024-04-02
  • SSH客户端连接远程服务器
    目录 一、什么是客户端连接远程服务器 二、什么是服务端连接远程服务器 三、查看网络信息 1、图形程序查看网络信息 2、命令查看网络信息 四、SSH客户端(Linux) 五、SSH客户端(windows) 六、SSH远程服务器 一、什么是...
    99+
    2023-09-20
    ssh 服务器 运维 linux
  • Socket结合线程池怎么实现客户端和服务端通信demo
    本篇内容主要讲解“Socket结合线程池怎么实现客户端和服务端通信demo”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Socket结合线程池怎么实现客户端和服务端通信demo”吧!1、要求可以...
    99+
    2023-06-29
  • 【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )
    文章目录 一、Socket 套接字简介1、Socket 套接字概念2、Socket 套接字类型3、Socket 套接字使用步骤4、Socket 套接字服务端与客户端 二、Socket 服务...
    99+
    2023-08-31
    Python socket 网络编程 TCP UDP 原力计划
  • Python基于socket怎么实现TCP客户端和服务端
    这篇文章主要讲解了“Python基于socket怎么实现TCP客户端和服务端”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基于socket怎么实现TCP客户端和服务端”吧!一、基...
    99+
    2023-06-30
  • 客户端Socket与服务端ServerSocket串联实现网络通信
    目录引导语1、类属性2、初始化3、bind4、accept5、面试题5.1、说说你对Socket和ServerSocket的理解?5.2、说说对SocketOptions中的SO_T...
    99+
    2024-04-02
  • PHP+Socket如何实现客户端与服务端数据传输
    这篇文章主要介绍“PHP+Socket如何实现客户端与服务端数据传输”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP+Socket如何实现客户端与服务端数据传输”文章能帮助大家解决问题。sock...
    99+
    2023-07-05
  • C++多线程实现TCP服务器端同时和多个客户端通信
    通讯建立后首先由服务器端发送消息,客户端接收消息;接着客户端发送消息,服务器端接收消息,实现交互发送消息。 服务器同时可以和多个客户端建立连接,进行交互; 在某次交互中,服务器端...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作