Сокет-сервера в Linux. (CentOS7).
1. NETCAT
В качестве сокет-сервера может выступать утилита netcat.
Сначала убедимся, что сервер на основе netcat работает и ему ничего не мешает. Запускаем на каком-нибудь сервере Linux сокет-сервер таким образом:
# nc -v -l 10.10.50.250 8021
Ip 10.10.50.250 – это Ip адрес нашего сервера.
8021 – это порт, который будет слушать сервер.
C другой машины подключаемся к созданному сокету так:
# nc 10.10.50.250 8021
Теперь можно писать друг другу что-то в чате и на обоих системах и это будет отображаться в обоих консолях.
При закрытии соединения с одной стороны, соединение закроется и с другой стороны.
С клиентской машины послать в порт данные можно так
# echo "12345" | nc 10.200.16.214 8021
Правда и в этот раз после приема данных сервер закроет соединение.
Для того что бы сервер каждый раз открывал соединение заново при закрытии сессии запускаем сервер так(с ключиком -k):
# nc -k -v -l 10.200.16.214 8021
2. PYTHON SOCKETSERVER
Ссылка на библиотеку сокет-сервера PYTHON:
https://docs.python.org/2/library/socketserver.html
Существует 4 класса SocketServer на PYTHON. Нас интересует класс TCPServer.
Создание сервера требует нескольких шагов. Во-первых, необходимо создать класс обработчик - подкласс класса BaseRequestHandler и переопределить в обработчике метод handle (); Этот метод будет обрабатывать входящие запросы. Во-вторых, нужно создать экземпляр класса TCPServer, передавая ему адрес сервера и класса обработчика.
Затем вызвать handle_request() или serve_forever().
Для закрытия сокета вызывается server_close ()
Файл сервера servcall.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
print "{} wrote:".format(self.client_address[0])
print self.data
self.request.sendall(self.data.upper())
server = SocketServer.TCPServer(("localhost", 8022), MyTCPHandler)
# Активация сервера до ввода Ctrl-C
server.serve_forever()
Сервер делает только одно: переводит все буквы в верхний регистр и отвечает тем же текстом клиенту.
Запуск сервера выполняется так:
# ./servcall.py
В соседней консоли создаем клиента.
Файл клиента clientsocketserv.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import sys
HOST, PORT = "10.200.16.214", 8022
data = " ".join(sys.argv[1:])
# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# Connect to server and send data
sock.connect((HOST, PORT))
sock.sendall(data + "\n")
# Receive data from the server and shut down
received = sock.recv(1024)
finally:
sock.close()
print "Sent: {}".format(data)
print "Received: {}".format(received)
Клиент принимает все аргументы команды запуска и отправляет их серверу
Запуск клиента:
# ./clientsocketserv.py 12345 privet drug
При этом мы увидим:
Sent: 12345 privet drug
Received: 12345 PRIVET DRUG
В консоли сервера будет отображено:
127.0.0.1 wrote:
12345 privet drug
Комментариев нет:
Отправить комментарий