(Очень) базовый пример сокета клиента Python
Я пытаюсь обернуть голову тем, как работают сокеты, и я пытался разобрать некоторый пример кода, который я нашел на этой странице для очень простой программы для сокетов клиента. Поскольку это базовый пример кода, я предположил, что у него не было ошибок, но когда я пытаюсь его скомпилировать, появляется следующее сообщение об ошибке.
Файл "client.py", строка 4, в client_socket.connect(('localhost', 5000)) Файл "", строка 1, в подключении socket.error: [Errno 111] Соединение отклонено
Я искал почти все части этой ошибки, и людям, у которых были подобные проблемы, похоже, помогли изменить номер порта, используя "connect" вместо "bind" и несколько других вещей, но никто из них не применил мою ситуацию. Любая помощь очень приветствуется, поскольку я очень новичок в сетевом программировании и довольно новичок в python.
Кстати, вот код, если ссылка по какой-либо причине не работает.
#client example
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5000))
while 1:
data = client_socket.recv(512)
if ( data == 'q' or data == 'Q'):
client_socket.close()
break;
else:
print "RECIEVED:" , data
data = raw_input ( "SEND( TYPE q or Q to Quit):" )
if (data <> 'Q' and data <> 'q'):
client_socket.send(data)
else:
client_socket.send(data)
client_socket.close()
break;
Ответы
Ответ 1
Он пытается подключиться к компьютеру, на котором он работает на порту 5000, но соединение отказывается. Вы уверены, что у вас работает сервер?
Если нет, вы можете использовать netcat
для тестирования:
nc -l -k -p 5000
В некоторых реализациях может потребоваться опустить флаг -p
.
Ответ 2
Вот простейший пример сокета 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 и убедитесь, что сервер готов слушать/получать sth
- Затем клиент отправляет информацию на сервер;
- После того, как сервер получил sth, он завершает
Ответ 3
Вот довольно простая программа сокетов. Это примерно так же просто, как сокеты.
для клиентской программы (CPU 1)
import socket
s = socket.socket()
host = '111.111.0.11' # needs to be in quote
port = 1247
s.connect((host, port))
print s.recv(1024)
inpt = raw_input('type anything and click enter... ')
s.send(inpt)
print "the message has been sent"
Вы должны заменить 111.111.0.11 в строке 4 номером IP, найденным в настройках сети второго компьютера.
Для серверной программы (CPU 2)
import socket
s = socket.socket()
host = socket.gethostname()
port = 1247
s.bind((host,port))
s.listen(5)
while True:
c, addr = s.accept()
print("Connection accepted from " + repr(addr[1]))
c.send("Server approved connection\n")
print repr(addr[1]) + ": " + c.recv(1026)
c.close()
Запустите программу сервера, а затем клиентскую.
Ответ 4
Похоже, ваш клиент пытается подключиться к несуществующему серверу. В окне оболочки запустите:
$ nc -l 5000
перед запуском вашего кода Python. Он будет действовать как сервер, прослушивающий порт 5000, к которому вы можете подключиться. Затем вы можете играть с вводом в окно Python и видеть его в другом терминале и наоборот.
Ответ 5
Возможно, вы сбиваете компиляцию из исполнения. У Python нет этапа компиляции!:) Как только вы наберете python myprogram.py
, программа запустится и, в вашем случае, попытается подключиться к открытому порту 5000, выдав сообщение об ошибке, если там не прослушивает серверная программа. Похоже, вы знакомы с двухэтапными языками, которые требуют компиляции для создания исполняемого файла - и, таким образом, вы запутываете компиляцию Python во время выполнения, что "я не могу найти никого, кто слушает порт 5000!" с ошибкой времени компиляции. Но, на самом деле, ваш код Python в порядке; вам просто нужно открыть слушателя, прежде чем запускать его!