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

Простейший пример клиент-серверный сокет 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 и убедитесь, что сервер готов к прослушиванию / получению. Затем клиент отправляет информацию на сервер; После того, как сервер получил что-то, он завершает работу

Создание 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() 

Создание 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))