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

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

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

    笨鸟先飞
  • 相关阅读:
    hihoCoder #1062 : 最近公共祖先·一
    hihoCoder #1050 : 树中的最长路
    hihoCoder #1049 : 后序遍历
    108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树
    107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
    106 Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树
    105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
    104 Maximum Depth of Binary Tree 二叉树的最大深度
    102 Binary Tree Level Order Traversal 二叉树的层次遍历
    101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/13714793.html
Copyright © 2011-2022 走看看