Работа с сетью в Python

Введение

Примеры

  • 0

    Простейший пример клиент-серверный сокет Python

    Сторона сервера:

     import socket
    
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind(('localhost', 8089))
    serversocket.listen(5) # become a server socket, maximum 5 connections
    
    while True:
        connection, address = serversocket.accept()
        buf = connection.recv(64)
        if len(buf) > 0:
            print(buf)
        break
    
     

    Сторона клиента:

     import socket
    
    clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    clientsocket.connect(('localhost', 8089))
    clientsocket.send('hello')
    
     

    Сначала запустите SocketServer.py и убедитесь, что сервер готов к прослушиванию / получению. Затем клиент отправляет информацию на сервер; После того, как сервер получил что-то, он завершает работу

  • 0

    Создание TCP-сервера

    Вы можете создать сервер TCP с помощью socketserver библиотеки. Вот простой эхо-сервер.

    Серверная сторона

     from sockerserver import BaseRequestHandler, TCPServer
    
    class EchoHandler(BaseRequestHandler):
        def handle(self):
            print('connection from:', self.client_address)
            while True:
                msg = self.request.recv(8192)
                if not msg:
                    break
                self.request.send(msg)
    
    if __name__ == '__main__':
        server = TCPServer(('', 5000), EchoHandler)
        server.serve_forever()
    
     

    Сторона клиента

     from socket import socket, AF_INET, SOCK_STREAM
    sock = socket(AF_INET, SOCK_STREAM)
    sock.connect(('localhost', 5000))
    sock.send(b'Monty Python')
    sock.recv(8192)  # returns b'Monty Python'
    
    
     

    socketserver делает его относительно легко создавать простые серверы TCP. Однако вы должны знать, что по умолчанию серверы являются однопоточными и могут одновременно обслуживать только одного клиента. Если вы хотите работать с несколькими клиентами, либо экземпляр ThreadingTCPServer вместо этого.

     from socketserver import ThreadingTCPServer
    ...
    if __name__ == '__main__':
        server = ThreadingTCPServer(('', 5000), EchoHandler)
        server.serve_forever() 
  • 0

    Создание UDP-сервера

    UDP - сервер легко создается с помощью socketserver библиотеки.

    простой сервер времени:

     import time
    from socketserver import BaseRequestHandler, UDPServer
    
    class CtimeHandler(BaseRequestHandler):
        def handle(self):
        print('connection from: ', self.client_address)
        # Get message and client socket
        msg, sock = self.request
        resp = time.ctime()
        sock.sendto(resp.encode('ascii'), self.client_address)
    
    if __name__ == '__main__':
        server = UDPServer(('', 5000), CtimeHandler)
        server.serve_forever()
    
     

    Тестирование:

     >>> from socket import socket, AF_INET, SOCK_DGRAM
    >>> sock = socket(AF_INET, SOCK_DGRAM)
    >>> sick.sendto(b'', ('localhost', 5000))
    0
    >>> sock.recvfrom(8192)
    (b'Wed Aug 15 20:35:08 2012', ('127.0.0.1', 5000)) 

Синтаксис

Параметры

Примечания