2012-12-08 12 views
5

robię program, który wymaga, aby otrzymywać hash połączenia z serwerem. Gdy używam:błąd Odd podczas korzystania s.recv() w Pythonie

connhash = s.recv(1024) 

otrzymuję ten błąd:

[Errno 10054] An existing connection was forcibly closed by the remote host 

Czy to moja wina, czy usterka serwery?

Oto kod prowadzące do s.recv()

stringfmt = u'%(user)s;%(host)s:%(port)d' 
string = stringfmt % data 
structfmt = '!bh' 
encoded = string.encode('utf-16BE') 
packetbytes = struct.pack(structfmt, 2, len(encoded))+encoded 
s.send(packetbytes) 
connhash = s.recv(1024) 

Używam Pythona v 2.7

EDIT: To jest dla Minecraft tak wiesz.

+0

serwer ona zamyka połączenie - może dlatego, że jesteś wysyłanie czegoś nie rozumie, może dlatego, że nie działa poprawnie ... nie da się powiedzieć, kto jest bez winy jest więcej informacji. – mata

+0

Siłą dla mnie brzmi jak RST (w przeciwieństwie do FIN) ... ale jeśli naprawdę chcesz wiedzieć, powinieneś zrobić przechwytywanie pakietów (tcpdump Wireshark, etc). – FatalError

Odpowiedz

2

Brzmi jak zdalny serwer nie lubi połączenie i kawałki można wyłączyć. Może to oznaczać, że popełniłeś błąd w protokole (tj. Wysyłane przez Ciebie polecenia są nieprawidłowe) lub możesz nie zalogować się pomyślnie, lub Twój adres IP mógł zostać zbanowany lub wiele innych podobnych rzeczy.

Aby przeprowadzić debugowanie, możesz spróbować użyć czegoś podobnego do telnetu, aby zreplikować połączenie i zobaczyć, gdzie pojawia się błąd (jeśli tak nie jest, oznacza to, że coś jest nie tak z implementacją, a jeśli tak, coś jest nie tak z twoje zrozumienie protokołu, lub jesteś zablokowany od korzystania z serwera).

Można również użyć narzędzia do przechwytywania pakietów, takiego jak Wireshark, aby sprawdzić, jakie pakiety są wysyłane i odbierane, i sprawdzić, czy to pokazuje problem.

Powiązane problemy