2015-03-28 3 views
1

Как я знаю, это приложение будет 100% не работать, но это только для теста, но я ожидал другую ошибку, кроме соединения, отказавшегося от моего браузера, я даже не получаю журнал, который мой браузер пытался подключить! поэтому я подумал, прежде чем делать это, мне нужно понять, почему ему отказано (я делаю это, чтобы экспериментировать с http!) Примечание: я использую сокет, а не любые HTTP-библиотеки, и эта проблема существует только в браузере, а не в клиентское приложение я написал, чтобы другие ответы не поможет мне это мой код:Python socket дает соединение отказался только от браузера

#!/usr/bin/python   # This is server.py file 

import socket    # Import socket module 

s = socket.socket()   # Create a socket object 
host = socket.gethostname() # Get local machine name 
port = 1234    # Reserve a port for your service. 
s.bind((host, port))  # Bind to the port 

s.listen(5)     # Now wait for client connection. 
while True: 
    c, addr = s.accept()  # Establish connection with client. 
    print 'Got connection from', addr 
    c.send(open("GPIOWEB/index.html").read()) 
    print c.recv(1024) 
    c.close()    # Close the connection 

клиент:

#!/usr/bin/python   # This is client.py file 

import socket    # Import socket module 

s = socket.socket()   # Create a socket object 
host = socket.gethostname() # Get local machine name 
port = 1234    # Reserve a port for your service. 

s.connect((host, port)) 
print s.recv(1024) 
s.close      # Close the socket when done 
+0

Браузер? Веб-сайт? Как вы это делаете? Это похоже на приложение CLI. –

+0

. Вы пытаетесь подойти к соединению сокетов, возвращая веб-сайт из приложения командной строки, когда это абсурд. Вместо этого вы должны настроить веб-сервер с django или любым видом –

+0

Браузер понимает протокол HTTP. Вы не можете просто отправлять данные так, как хотите, и ожидать, что они поймут. – Sanketh

ответ

2

Вы можете доступ вашего server.py программы через браузер, но вам необходимо сообщить браузеру (так что он может сказать OS) как вы ожидаете получить там.

Когда вы

host = socket.gethostname() # Get local machine name 
s.bind((host, 1234))  # Bind to the port 

Вы привязки к конкретному интерфейсу.

Добавьте print(host), чтобы узнать, с каким интерфейсом вы привязываетесь. Затем в вашем браузере введите <host>:1234 по адресу - где <host> - это то, что было напечатано.

Ваш браузер будет отображать содержимое GPIOWEB/index.html и ваша server.py программа будет отображать что-то вроде:

 
Got connection from ('127.0.0.1', 63358) 
GET/HTTP/1.1 
Host: localhost:1234 
Connection: keep-alive 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 

В качестве альтернативы, связываются с все доступные интерфейсы с,

port = 1234     # Reserve a port for your service. 
s.bind(('', port))   # Bind to the port 

(Примечание '', используемый для хоста)

Теперь вы должны быть в состоянии связаться с программой по всем видам адресов, например:

localhost:1234 
127.0.0.1:1234 
<Your LAN IP>:1234 

Некоторые из них могут зависеть от настроек брандмауэра, вы можете рассмотреть его отключить временно, если вы не получаете результаты, которые вы ожидаете, то обновления конфигурации соответственно.

+1

Спасибо! это помогло, а не у меня был мой простой глупый сервер: D он поможет мне понять (и экспериментировать), как работает HTTP при чтении учебника: D – user3033693

+1

Не могу отредактировать его, но я имел в виду (сейчас) – user3033693

0

Вы реализовали протокол в приложении:

on_connect SERVER send index.html to CLIENT 

Ваш клиент говорит об этом протоколе. Браузер не сделал этого. Используйте сниффер (wirehark, tcpdump и т. Д.), Чтобы увидеть трафик сервера-клиента.

 Смежные вопросы

  • Нет связанных вопросов^_^