zoukankan      html  css  js  c++  java
  • python编程系列---tcp服务端的简单实现

    流程如下:

    """tcp服务端创建流程
    1. 创建服务端的tcp socket : server_socket 用于监听客户端的请求
    2. 绑定端口
    3. server_socket开启监听,由主动连接模式变为被动接受模式
    4. 等待接收客户端的请求, 一有连接,则立即响应,且创建一个与客户端对接的socket,用该socket与客户端通信
    5. 使用新创建的socket与客户端通信
    6. 关闭新创建的socket, 该socket关闭,则与当前客户端结束通信
    7. server_socket关闭,则不再接收新的客户端请求
    """

    代码如下:

     1 from socket import *
     2 
     3 
     4 def main():
     5     # 1.创建tcp_server_socket 套接字对象,用于监听客户端的请求
     6     tcp_server_socket = socket(AF_INET,SOCK_STREAM)
     7 
     8     # 复用同一个端口而不会提示端口被占用 ,解决当关闭的socket当处于time_out状态时, 也可立即使用端口
     9     """
    10         socket.setsockopt(level,option,value) :配置socket
    11         level:等级,对哪个等级操作(ip,tcp,udp,socket等级)
    12         option:设置哪个选项
    13                 socket.SO_REUSEADDR: 复用地址
    14         value: True:表示复用,False,表示不复用
    15     """
    16     tcp_server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,True)
    17     # 提示:socket.setsockopt()方法要在 socket.bind()之前设置
    18 
    19     # 2.绑定端口
    20     tcp_server_socket.bind(('',9999))
    21 
    22     # 3. tcp_server_socket开始监听,有主动连接模式变为被动连接模式
    23     tcp_server_socket.listen(5)
    24 
    25     # 4.等待客户端的请求,一有连接,就创建一个与客户端对接的new_socket新套接字,并且用这个新关键字与客户端联系
    26     while True:
    27         new_socket,client_addr = tcp_server_socket.accept()
    28         print("新客户端连接:" ,client_addr)
    29         new_socket.send("欢迎使用".encode())
    30         
    31         # 5.使用新创建的new_socket来与客户端通信
    32         #  此处的while True为同一客户端提供多次服务
    33         while True:
    34             recv_data = new_socket.recv(1024)
    35 
    36             if recv_data:
    37                 print("新消息:%s,来自:%s"%(recv_data.decode('gbk'),client_addr))
    38 
    39                 # 给客户端返回消息
    40                 new_socket.send("再见".encode())
    41 
    42             else:
    43                 print('对方已经下线')
    44                 break
    45 
    46         # 6. 关闭新创建的socket, 该socket关闭,则与当前客户端结束通信
    47         new_socket.close()
    48 
    49     # 7.server_socket关闭,则不再接收新的客户端请求
    50     tcp_server_socket.close()   
    51 
    52 
    53 if __name__ == '__main__':
    54     main()

    结果如下:

    小结:

       最简单的 流程就是不要两个while True, 这样的服务器相当于10086一天只服务一个人后就下班

      1.加第一个while True 实现了一天可以服务很多人,但是一次只能服务一个人,而且这个人只能说一句话后即退出服务,继续接收下个客户"""
      2.第二个while True 实现了客服可以说多句话,但是依旧不能一次性接入多个客户(需要用到多任务)

    如果你和我有共同爱好,我们可以加个好友一起交流!

     

  • 相关阅读:
    想你,却不能告诉你
    【缅怀妈妈系列诗歌】之十七:叩别妈妈
    80后的大旗正矗立在中华大地上迎风飘扬
    【缅怀妈妈系列诗歌】之九:月祭母亲
    【缅怀妈妈系列诗歌】之十一:妈妈,我们回家
    工欲善其事,必先利其器——图文并茂详解VisualStudio使用技巧二 (转)
    工欲善其事,必先利其器——图文并茂详解VisualStudio使用技巧一 (转)
    老婆,我会好好爱你的
    【缅怀妈妈系列诗歌】之十:妈妈,孩儿答应您
    【缅怀妈妈系列诗歌】之八:妈妈,我不会忘记
  • 原文地址:https://www.cnblogs.com/ywk-1994/p/9427401.html
Copyright © 2011-2022 走看看