Базовый пример клиентского сокета Python
Я пытался обернуть голову вокруг того, как работают сокеты, и я пытался разобрать какой-то пример кода, который я нашел в на этой странице для очень простой программы сокета клиента. Поскольку это базовый пример кода, я предположил, что у него нет ошибок, но когда я пытаюсь его скомпилировать, я получаю следующее сообщение об ошибке.
файл "client.py", строка 4, in
клиентский сокет.connect (('localhost', 5000))
Файл"", строка 1, in connect
разъем.ошибка: [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;
5 ответов:
он пытается подключиться к компьютеру, на котором он работает на порту 5000, но соединение отказано. Вы уверены, что у вас работает сервер?
Если нет, вы можете использовать
netcatдля теста:nc -l -k -p 5000некоторые реализации могут потребовать от вас опустить
-pфлаг.
вот самый простой пример сокета 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, он завершается
вот довольно простая программа розетку. Это примерно так же просто, как и сокеты.
для клиентской программы (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()запустите серверную программу, а затем клиентскую.
похоже, ваш клиент пытается подключиться к несуществующему серверу. В окне оболочки запустите:
$ nc -l 5000перед запуском кода Python. Он будет действовать как сервер, прослушивающий порт 5000 для подключения. Затем вы можете играть с вводом в окно Python и видеть, как он появляется в другом терминале и наоборот.
возможно, вы путаете компиляцию с выполнением. Python не имеет шага компиляции! :) Как только вы наберете
python myprogram.pyпрограмма запускается и, в вашем случае, пытается подключиться к открытому порту 5000, давая ошибку, если ни одна серверная программа не слушает там. Похоже, вы знакомы с двухэтапными языками, которые требуют компиляции для создания исполняемого файла - и поэтому вы путаете компиляцию времени выполнения Python, что "я не могу найти никого, кто слушает порт 5000!"с ошибкой времени компиляции. Но, на самом деле, ваш код Python в порядке; вам просто нужно вызвать слушателя перед его запуском!
Comments