多线程/进程tcp服务器代码的书写01版本

from socket import *
from threading import  Thread

def main():
    #必须参数
    server_socket = socket(AF_INET,SOCK_STREAM)
    #以免万一是服务器首先发出四次挥手就要等待2SML,防止地址没有被释放
    server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    server_socket.bind(('',6628))
    server_socket.listen(5)

    try:
        while True:
            print ('等待客户端的到来')
            new_socket, client_addr = server_socket.accept()

            print ('为新来的客户端(%s)创建一个线程服务'%str(client_addr))
            print ()
            client_thread = Thread(target=serve_client_thread,args=(new_socket,client_addr))

            client_thread.start()

            #client_thread.join()
            #join不能有!为什么?
            #因为如果有类join()那么主线程必须等待这个子线程执行完毕之后才能继续回去执行while循环
            #结果就是第一个客户端如果一直不结束,后面来的其他客户端就不能正常 与服务器通信
            #最终这就相当于单线程的服务器,根本没用到多线程的优点!!!!
            #自己去试一试 会有更深刻的体验!!!!!!不懂就去运行 从结果分析~~~

            #new_socket.close()
            # 线程中由于共用一个socket所以这里不能写这句不然之后的客户端请求也就无法继续进行了
            # 进程中是不共用的所以不用注释掉这句话!!!
            # 那为什么不用多进程而是用多线程呢?应为进程占的资源大啊~~~~~

    finally:
        server_socket.close()

def serve_client_thread(new_socket, client_addr):

    while True:

        recv_info = new_socket.recv(1024)

        if len(recv_info.decode('gb2312')) > 0:
            print ('client_addr:%s,recv_Info:%s'%(str(client_addr),recv_info.decode('gb2312')))

        else:
            print ('客户端%s关闭~'%str(client_addr))
            new_socket.close()

            break


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多线程/线程池TCP服务器端程序设计需要考虑以下几个方面: 1. 网络通信:使用socket进行TCP通信,需要考虑如何接收和发送数据。 2. 多线程/线程池:使用多线程或线程池来处理客户端连接请求,可以提高服务器的并发性能。 3. 数据处理:对接收到的数据进行处理,根据业务逻辑进行相应的处理操作。 4. 数据存储:将处理好的数据进行存储,可以使用数据库或者文件等方式。 下面是一个简单的多线程TCP服务器端程序设计: ```python import socket import threading def handle_client(conn, addr): print("[*] Accepted connection from: %s:%d" % (addr[0], addr[1])) data = conn.recv(1024) response = "Hello client!" conn.send(response.encode()) conn.close() def main(): host = "127.0.0.1" port = 9999 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((host, port)) server_socket.listen(5) print("[*] Listening on %s:%d" % (host, port)) while True: conn, addr = server_socket.accept() client_handler = threading.Thread(target=handle_client, args=(conn, addr)) client_handler.start() if __name__ == "__main__": main() ``` 上面的程序使用了多线程来处理客户端连接请求,每个线程都会调用handle_client函数来处理连接。在handle_client函数中,首先接收客户端发送的数据,然后给客户端发送一个简单的响应,最后关闭连接。 需要注意的是,上面的程序只是一个简单的示例,实际应用中可能需要考虑更多的细节问题,比如线程池的实现、异常处理、数据加密等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值