Пример базового клиентского сокета Python - PullRequest
60 голосов
/ 13 октября 2011

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

Файл "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;

Ответы [ 5 ]

122 голосов
/ 18 августа 2013

Вот самый простой пример сокета 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
  • Затем клиент отправляет информацию на сервер;
  • После того, как сервер получил что-то, он завершает работу
23 голосов
/ 07 февраля 2016

Вот довольно простая программа для сокетов.Это почти так же просто, как получить сокеты.

для клиентской программы (ЦП 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-номер, найденный вСетевые настройки второго компьютера.

Для серверной программы (ЦП 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()

Запустите серверную программу, а затем клиентскую.

21 голосов
/ 13 октября 2011

Он пытается подключиться к компьютеру, на котором работает, через порт 5000, но соединение отклоняется.Вы уверены, что у вас работает сервер?

Если нет, вы можете использовать netcat для тестирования:

nc -l -k -p 5000

В некоторых реализациях может потребоваться опустить-p флаг.

4 голосов
/ 13 октября 2011

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

$ nc -l 5000

перед запуском кода Python.Он будет действовать как сервер, прослушивающий порт 5000, к которому вы можете подключиться.Затем вы можете поиграть в окно Python и увидеть его в другом терминале, и наоборот.

3 голосов
/ 13 октября 2011

Возможно, вы путаете компиляцию с выполнением.У Python нет шага компиляции!:) Как только вы наберете python myprogram.py, программа запустится и, в вашем случае, попытается подключиться к открытому порту 5000, выдав ошибку, если серверная программа там не прослушивает.Похоже, вы знакомы с двухэтапными языками, которые требуют компиляции для создания исполняемого файла - и, таким образом, вы путаете компиляцию времени исполнения Python, что «я не могу найти никого, слушающего порт 5000!» С ошибкой во время компиляции.Но, на самом деле, ваш код Python в порядке;вам просто нужно вызвать слушателя, прежде чем запускать его!

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