zoukankan      html  css  js  c++  java
  • python网络编程TCP服务多客户端的服务端开发

    #服务多客户端TCP服务端开发                                   2 #方法说明
      3 """
      4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进
        行绑定,表示本机的任何一个ip地址都行,port是端口号
      5 listen(backlog)表示设置监听,backlog参数表示最大等待连接的>    个数
      6 accept()表示等待接受客户端的连接请求
      7 """
      8 import socket
      9 import threading
     10 #处理客户端请求
     11 def client_socket(ip_port,new_client):#子线程来完成
     12     print("客户端的ip和端口号为:",ip_port)
     13     while True:
     14         data = new_client.recv(1024)
     15         if data:
     16             #接受客户端的收据
     17             #对二进制数据进行解码
     18             recv_data = data.decode("utf-8")
     19             print("接收客户端的数据为:",recv_data)
     20             #发送数据到客户端
     21             client_data = "最伟大"
     22             send_data = client_data.encode("utf-8")
     23             new_client.send(send_data)
     24         else:
     25             print("客户端下线了:",ip_port)
     26             break
     27     #关闭服务与客户端套接字,表示终止服务端与客户端通信
     28     new_client.close()
     29 
     30 if __name__ == "__main__":
     31     #创建服务端套接字对象
     tcp_server_socket = socket.socket(socket.AF_INET,socket    .SOCK_STREAM)
     33     #绑定端口号
     34     #ip地址一般不写死,只要是本机电脑的任何一个ip地址都行
     35     tcp_server_socket.bind(("",8080))
     36     #设置端口号复用:服务端程序退出后端口立即释放
     37     #1.socket.SOL_SOCKET:表示当前套接字
     38     #2.socket.SO_REUSEADDR:表示复用端口号的选项
     39     #3.True:确定复用
     40     tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
     41     #设置监听
     42     tcp_server_socket.listen(128)
     43     #等待客户端的连接请求
     44     #注意点:每次当客户端和服务端建立连接成功会返回一个新的>    套接字new_client
     45     #tcp_server_socket套接字只负责接受连接请求,收发消息只>    用返回的新套接字
     46     while True:
     47         new_client,ip_port = tcp_server_socket.accept()
     48         #客户端和服务端建立连接成功,创建子线程,让子线程专
        门负责接受客户端消息
     49         sub_thread = threading.Thread(target = client_socket,args = (ip_port,new_client))
     50         #设置守护主线程,主线程退出子线程直接销毁
     51         sub_thread.setDaemon(True)
     52         #关闭服务端套接字
     53         sub_thread.start()
     54     #服务端需要一直运行
     55     #tcp_server_socket.close()

    实现多任务可以用进程或者线程来来完成

    但开辟线程对资源的消耗比线程大,所以我们选择创建子线程来完成服务器服务于多客户端

    笨鸟先飞
  • 相关阅读:
    SQLyog使用期限(治标不治本的,治本的还没找到)
    计算机系统第一章
    Netty实现远程调用RPC功能
    基于Redis实现分布式锁
    Java代理
    Java反射机制
    权限之菜单权限
    记录一次 数据库迁移 MSSQL 到MySql
    .net core2.0 使用数据库创建EF模型(db first)
    VS 函数,方法上方 引用等显示
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/13714793.html
Copyright © 2011-2022 走看看