Python socket.send не работает - PullRequest
0 голосов
/ 07 мая 2018

Простое клиент-серверное приложение.

#Server use decode
import socket


s = socket.socket()
host = socket.gethostname()
port = 12345
s.bind((host,port))

s.listen(5)

while True:

    c,addr = s.accept()
    print("Got connection from " + str(addr))
    ret_val = s.send("Thank you".encode('utf-8'))
    print ("ret_val={}".format(ret_val))
    c.close()

Клиент:

#client use decode
from socket import gethostname, socket

serSocket = socket()
server = gethostname()
port = 12345
serSocket.connect((server, port))

data = serSocket.recv(1024)
msg = data.decode('utf-8')
print("Returned Msg from server:  <{}>".format(msg))

serSocket.close()

когда сервер пытается отправить следующее исключение произошло

Traceback (most recent call last):
Got connection from ('192.168.177.1', 49755)
  File "C:/Users/Oren/PycharmProjects/CientServer/ServerSide/Server2.py", line 16, in <module>
    ret_val = s.send("Thank you".encode('utf-8'))
OSError: [WinError 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied

Process finished with exit code 1

Как видно, клиент успешно подключается к серверу. Но отправить не удается.

В чем проблема?

1 Ответ

0 голосов
/ 07 мая 2018

Проблема в том, что вы отправляете на прослушивающий разъем, а не на подключенный разъем. connect возвращает новый сокет, который вы должны использовать для передачи данных. Разъем для прослушивания никогда не может использоваться для отправки или получения данных.

Измените отправку на это, и ваша программа будет работать нормально:

ret_val = c.send("Thank you".encode('utf-8'))

(примечание c.send, а не s.send)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...