Я пытаюсь реализовать простой ftp с сокетами, используя C (на стороне сервера) и Python (на стороне клиента). Когда код сервера скомпилирован и запущен, пользователь вводит номер порта. Затем клиент вводит «localhost» при компиляции. По какой-то причине я получаю [Errno 111] на стороне клиента, когда я запускаю код. Он говорит, что проблема связана с моим заявлением client.connect
. Я попытался с помощью нескольких номеров портов разные, и выдает эту же ошибку:Соединение с разъемами отказано [Errno 111]
flip1 ~/FTPClient 54% python ftpclientNew.py localhost 2500
Traceback (most recent call last):
File "ftpclientNew.py", line 86, in <module>
main()
File "ftpclientNew.py", line 27, in main
if client.connect((serverName, portNumber)) == None:
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused
Еще одна странная вещь, что эта ошибка соединения не происходит, когда я запустил этот же код несколько дней назад. Кто-нибудь испытал такую проблему? Любая идея, что может быть причиной этого? Благодаря!
Вот код клиента:
import sys, posix, string
from socket import *
def main():
if len(sys.argv) < 3:
print "\nFormat: 'localhost' <port number>!\n"
return 0
buffer = ""
bufferSize = 500
serverName = "localhost"
fileBuffer = [10000]
if sys.argv[1] != serverName:
print "Incorrect Server Name! \n"
return 0
portNumber = int(sys.argv[2])
client = socket(AF_INET, SOCK_STREAM)
if client < 0:
print "Error Creating Socket!! \n"
return 0
if client.connect((serverName, portNumber)) == None:
print "Client Socket Created...\n"
print "Connecting to the server...\n"
print "Connected!\n"
##clientName = raw_input("Enter a file name: ")
Убедитесь, что порт открыт с помощью 'netstat', попробуйте другой клиент или сервер, отлаживая« nc »и« tcpdump ». –
111 означает, что сервер не прослушивал сервер, или сервер активно отклонил соединение. Этот второй будет прав, только если сервер устанавливает параметр «задерживать», которого, вероятно, нет. Это linux/mac? Было предложено посмотреть, какие порты открыты с 'netstat'. Это хорошая идея. Ваш код немного bizzare (требуется, чтобы вы вводили имя хоста, но ошибки, если это не «localhost»), но должны работать. Это проблема с сервером. Вы можете добавить 'print gethostbyname ('localhost')', чтобы убедиться, что у вас нет проблемы с конфигурацией системы. – tdelaney