Wireshark показал/захватил http-пакет получения изображения, но сокет не получил его [дубликат]Python

Программы на Python
Ответить
Anonymous
 Wireshark показал/захватил http-пакет получения изображения, но сокет не получил его [дубликат]

Сообщение Anonymous »

У меня есть простой веб-сервер и 1 простая веб-страница index.html, содержащая только 1 элемент изображения для отправки веб-клиенту.У меня есть веб-браузер Chrome, работающий на Android Позвоните, чтобы получить эту веб-страницу с этого веб-сервера.
У меня проблема.
Код веб-сервера может получить первое сообщение запроса, отправленное из Интернета. клиент, но не второй.
Когда веб-клиент отправляет первый запрос, код веб-сервера может распечатать запрос. Этот средний метод Recv() хорош. Я имею в виду, что метод Recv() может получить первый запрос этого веб-клиента, а также веб-сервер может отправить первый ответ обратно этому веб-клиенту с байтами веб-страницы index.html, но не с байтами изображения, потому что байты изображения будут отправлены этим веб-сервер после того, как этот веб-клиент отправил второй запрос, как я объясню ниже.
Но когда веб-клиент отправил второй запрос на веб-сервер, чтобы получить изображение этой веб-страницы в том виде, в каком оно есть в Интернете. клиент должен сделать, чтобы получить полную веб-страницу, код веб-сервера блокируется или навсегда зависает в инструкции Recv(), не получая второй запрос от этого веб-клиента. С другой стороны, Wireshark перехватил второй запрос от этого веб-клиента. Это означает, что веб-клиент действительно отправил второй запрос на компьютер веб-сервера, и он прибыл на компьютер веб-сервера. Но почему функция Recv() не может получить второй запрос? Почему функция Recv() может получить только первый запрос от этого веб-клиента?
Почему это происходит и что не так?
Спасибо.< /p>
Это очень простой код моего веб-сервера:

Код: Выделить всё

    import socket

HOST = '192.168.43.157'
PORT = 80

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('# Socket created')
# Create socket on port
try:
s.bind((HOST, PORT))
except socket.error as msg:
print('# Bind failed. ')
sys.exit()

print('# Socket bind complete')

# Start listening on socket
s.listen(10)
print('# Socket now listening')

# Wait for client
conn, addr = s.accept()
print('# Connected to ' + addr[0] + ':' + str(addr[1]))
response = open(r"C:\Users\Totz Tech\Videos\response.txt",'rb').read()

# Receive data from client
while True:
print (addr[0])
data = conn.recv(5048)
line = data.decode('UTF-8') # convert to string (Python 3 only)
#Parse the line to get the web page request
line_member = line.split("\r\n")   # remove newline character
line0member = line_member[0]
line01member = line0member.split(" ")
try:
line01member[1][1:] == ""
except:
print("Ada error bro")
else:
if line01member[1][1:] == "":
token = r"C:\Users\Totz Tech\Videos\mypage.html"
print("Ini token: " + token)
else:
token = line01member[1][1:]
print("Ini token: " + token)

f1 = open(token,'rb')
f1r = f1.read()
conn.send(response+f1r)
print("Go UP")

s.close()
Это файл reponse.txt, содержащий:

Код: Выделить всё

HTTP/1.1 200 OK
Это файл mywebpage.html, содержащий:

Код: Выделить всё




The a download attribute

Click on the image to download it:
[url=w3logo.jpg]
[img]w3logo.jpg[/img]
[/url]

Notice that the filename of the downloaded file will be saved as "w3logo.jpg" instead of "myw3schoolsimage.jpg".

Note:[/b] The download attribute is not supported in IE or Edge (prior version 18), or in Safari (prior version 10.1).



Изображение


Подробнее здесь: https://stackoverflow.com/questions/769 ... receive-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»