0

Есть проект, в нём 2 файла:

1 файл с именем Server.py

import socket
server_socket = socket.socket()
server_socket.bind(('127.0.0.1', 5090))
server_socket.listen(1)
conn, addr = server_socket.accept()
#content = 'hello friend'
#answer = sock.sendall((content).encode())
print ('connected:', addr)

while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.send(data.upper())

conn.close()

И 2 файл с именем Client.py

import socket

sock = socket.socket()
sock.connect(('127.0.0.1', 5090))
sock.send('hello, world!')

data = sock.recv(1024)
sock.close()

print (data)

Как сделать их одновременное выполнение? Или по другому говоря чтобы их соединить

David
  • 1,273
  • Сначала запустить руками Server.py после Client.py – gil9red Apr 08 '20 at 19:04
  • @gil9red а можно их как то объединить? – David Apr 08 '20 at 19:12
  • Не понятно, что у вас проблемы вызвало. Можно в батнике описать запуск обоих файлов, можно из скрипта питона вызывать по очереди, например через subprocess. Кст, у вас ошибка в client.py -- в send нужно передавать массив байтов, а у вас строка – gil9red Apr 08 '20 at 19:26
  • Кст, если не хотите чтобы ваш сервер был одноразовым, то код с conn, addr = server_socket.accept() тоже нужно в бесконечный цикл, а то после первого же ответа сервер завершит работу – gil9red Apr 08 '20 at 19:32

1 Answers1

1

Решение через subprocess:

import subprocess
import sys
import time

server = subprocess.Popen([sys.executable, 'server.py'])
time.sleep(2)  # Даем время серверу на запуск

client = subprocess.Popen([sys.executable, 'client.py'])

server.wait()

server.py:

import socket
server_socket = socket.socket()
server_socket.bind(('127.0.0.1', 5090))
server_socket.listen(1)
conn, addr = server_socket.accept()
print('connected:', addr)

while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.send(data.upper())

conn.close()

print('closed')

client.py:

import socket

sock = socket.socket()
sock.connect(('127.0.0.1', 5090))
sock.send('hello, world!'.encode('utf-8'))

data = sock.recv(1024)
sock.close()
gil9red
  • 77,085
  • спасибо, а не могли бы подсказать кое с чем? – David Apr 08 '20 at 19:37
  • @David, попробую подсказать – gil9red Apr 08 '20 at 19:38
  • https://ru.stackoverflow.com/questions/1107451/socket-python-%d0%bd%d0%b5-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82-%d0%b2-google-chrome?noredirect=1#comment1909401_1107451 – David Apr 08 '20 at 19:38
  • ну как? Получилось? – David Apr 08 '20 at 20:16
  • @David, чтобы с браузерами работать нужно использовать протокол HTTP, а у вас такого не вижу, вот пример: https://github.com/gil9red/SimplePyScripts/blob/b48d30ae4223df7830d7bf7c20734a300a66b3d9/socket__tcp__examples/http_server.py#L16 – gil9red Apr 09 '20 at 08:40
  • Спасибо большое! А может вы знаете какой нибудь материал для изучения сокетов, плюс самого модуля socket в python? Где такие тонкости будут объясняться – David Apr 09 '20 at 11:05
  • @David, документация питона по сокетам https://docs.python.org/3.7/library/socket.html и https://docs.python.org/3.7/library/socketserver.html#module-socketserver. Еще по материалам посмотрите тут: https://ru.stackoverflow.com/a/420126/201445 – gil9red Apr 09 '20 at 11:21