zoukankan      html  css  js  c++  java
  • socket 客户端和服务端思考

    accept :连接一个客户端:连接对象, 地址

    这个连接断开之前,别的连接是不受理的。如果客户端断开,会报错,因为连接突然没了。

    所以,客户端会使用随机端口,但是端口会用完。因为端口不会立即释放。跟系统设置有关,一般的业务应该没有问题,自动释放,是可以接受的。

    不对的 !!!:一个端口只用一次。

    不对的 !!!:所以,用 bind 固定客户端端口。服务端异常处理。每个服务分配一个端口,软件运行中不关闭连接。

    服务端应该使用 内置模块 serversocket,并发服务器。

    socket 客户端不允许发送 空字符串,会夯住

    socket 服务端,当接受字符串为:0,客户端断开了连接

    socket server

    import socket
    import socketserver
    
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.bind(('127.0.0.1',5555))
    s.listen(5)
    cs,address=s.accept() #让服务器可以在close之后接收其他客户端的连接请求
    while True:
        data = cs.recv(1024)
        cs.send(b'OK hello world!')
    s.close()
    

    socket client

    '''socket测试客户端'''
    import socket
    
    plc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    plc_socket.bind(('127.0.0.1',5001))
    plc_socket.connect((plc_ip, plc_port))
    while 1:
        try:
            plc_socket.send(send_data.encode('utf-8'))
            recv_data = plc_socket.recv(1024)
        except OSError:
            logging.exception('oserror')
            plc_socket.close()
    
    
    
    

    socketserver

    '''socket测试服务端'''
    import socketserver
    
    class SockeListenServer(socketserver.BaseRequestHandler):
        def handle(self):
            while True:
                try:
                    data = self.request.recv(1024)
                    self.request.send(b'OK zzz
    ')
                    print("客户端%s发来的消息:%s"%(self.client_address,data.decode('utf-8')))
                except Exception as e:
                    print(e)
                    break
            self.request.close()
                # 关闭服务(可选操作)
            self.server.shutdown()
                # phone.close()
    
    server = socketserver.ThreadingTCPServer(('127.0.0.1',8501),SockeListenServer)
    server.serve_forever()
    
  • 相关阅读:
    POJ 2987:Firing(最大权闭合图)
    BZOJ 1001:[BeiJing2006]狼抓兔子(最小割)
    HDU 1007:Quoit Design(分治求最近点对)
    POJ 1986:Distance Queries(倍增求LCA)
    HDU 3879 && BZOJ 1497:Base Station && 最大获利 (最大权闭合图)
    BZOJ-1011 遥远的行星
    BZOJ-1044 木棍分割
    BZOJ-1042 硬币购物
    BZOJ-1050 旅行
    BZOJ-1037 生日聚会
  • 原文地址:https://www.cnblogs.com/pythonwl/p/15190847.html
Copyright © 2011-2022 走看看