Итак, у меня есть этот сервер python, который просто возвращает предложение в верхнем регистре, которое было введено:
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('192.168.1.2', serverPort))
print "The server is ready to receive on port: {}".format(serverPort)
while 1:
message, clientAddress = serverSocket.recvfrom(2048)
print clientAddress, message
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage, clientAddress)
От этого клиента:
from socket import *
serverName = "192.168.1.3"
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = raw_input("Input lowercase sentence:")
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print modifiedMessage
clientSocket.close()
Все работает как положено на localhost
но когда я выполняю server.py
на одной машине и запустить client.py
на другой машине клиент не может связаться server.py
.
Кроме того, я даже не могу подключиться к server.py
через telnet
на той же машине, где server.py
выполняется) Вот трассировка:
Connecting To 192.168.1.2...Could not open connection to the host, on port 12000: Connect failed
Теперь я прослушал несколько пакетов с помощью Wireshark, и, что удивительно, протокол для этого пакета был LLC
вместо того UDP
и поле данных было:
Data: 74:5f:32:20:61:6e:64:72:6f:69:64
[Length: 11]
Прошу прощения, если разница незначительна, но я только начал программировать сокеты, и это меня беспокоит.
Во-первых, SOCK_DGRAM
является UDP
так что вы не сможете использовать telnet
потому что это TCP
только.
Пакеты UDP
. Я ожидаю этого wireshark
просто принимает их за LLC
из-за порта 12000
(LLC
работает поверх UDP
Я считаю).
Похоже, это не работает, потому что вы установили serverName
к .3
в клиентском скрипте, но сервер слушает .2
.
Я также просто проигнорирую верблюжий корпус в Python;)