HTTP request: connection rest by peer

  • Antworten:1
Phil
  • Forum-Beiträge: 40

06.05.2011, 13:22:42 via Website

Hallo,
ich habe ein kleines Problem mit einem HTTP request:
Ich habe mir in Visual Studio einen Dienst mit einem Webserver gebastelt. Dieser reagiert einfach nur auf Parameter und gibt dann entsprechende Werte zurück.
Z.B.: http://192.168.0.5:8080/?cmd=getVersion

Wenn ich diese URL im Browser aufrufe, dann bekomme ich die erwartete Antwort.

Mache ich nun einen HTTP Request von dem Android Gerät aus (Samsung Galaxy Tab), dann bekomme ich zu 98 % ein connection reset by peer und zu 2% die erwartete Antwort.

Lege ich nun eine Textdatei mit der erwarteten Antwort auf einen XAMPP Server und rufe diese URL (z.B. http://192.168.0.5/test.txt) auf, dann funktioniert alles wunderbar. Nun möchte ich aber nicht mit solch einem Webserver arbeiten, sondenr mit meinem "eigenen". Vllt hat ja einer von euch eine Idee oder Tipps worauf ich achten sollte. Das Gerät ist im WLAN und befindet sich auch im gleichen Netzwerk wie der PC bzw. Server.

Damit ihr auch noch was zum gucken habt, hier einmal die entspr. Quelltextauszüge von Client und Server, wobei mehr VB.net Quelltext zu sehen ist, weil ich glaube dass da das Problem liegt und ich den Server evtl nur etwas anders ansprechen muss:

Client:
1private String getURL(String strURL) {
2 String result = "";
3 DefaultHttpClient httpclient = new DefaultHttpClient();
4 HttpGet httpget = new HttpGet(strURL);
5 HttpResponse response;
6
7 try {
8 response = httpclient.execute(httpget);
9 ByteArrayOutputStream out = new ByteArrayOutputStream();
10 response.getEntity().writeTo(out);
11 out.close();
12 result = out.toString();
13 } catch (Exception ex) {
14 Toast.makeText(getApplicationContext(), "getURL: "+ex.toString(), Toast.LENGTH_SHORT).show();
15 }
16 return result;
17 }

Server:
1'es wird auf eine verbindung gewartet
2Public Sub ProcessThread()
3 While (True)
4 Try
5 clientSocket = serverSocket.Accept()
6
7 ' Socket Information
8 Dim clientInfo As IPEndPoint = CType(clientSocket.RemoteEndPoint, IPEndPoint)
9 Dim serverInfo As IPEndPoint = CType(serverSocket.LocalEndPoint, IPEndPoint)
10
11 Console.WriteLine("Client: " + clientInfo.Address.ToString() + ":" + clientInfo.Port.ToString())
12 Console.WriteLine("Server: " + serverInfo.Address.ToString() + ":" + serverInfo.Port.ToString())
13
14 ' Set Thread for each Web Browser Connection
15 Dim clientThread As New Thread(New ThreadStart(AddressOf ProcessRequest))
16
17 clientThread.Start()
18 Catch ex As Exception
19 Console.WriteLine(ex.StackTrace.ToString())
20
21 If clientSocket.Connected Then
22 clientSocket.Close()
23 End If
24 End Try
25 End While
26 End Sub
27
28' anfrage verarbeiten
29 Protected Sub ProcessRequest()
30 Dim recvBytes(1024) As Byte
31 Dim htmlReq As String = Nothing
32 Dim bytes As Int32
33
34 Try
35 ' Receive HTTP Request from Web Browser
36 bytes = clientSocket.Receive(recvBytes, 0, clientSocket.Available, SocketFlags.None)
37 htmlReq = Encoding.ASCII.GetString(recvBytes, 0, bytes)
38
39 Console.WriteLine("HTTP Request: ")
40 Console.WriteLine(htmlReq)
41
42 ' Set WWW Root Path
43 Dim rootPath As String = Directory.GetCurrentDirectory() & "\WWWRoot\"
44
45 ' Set default page
46 Dim defaultPage As String = "index.html"
47
48 Dim strArray() As String
49 Dim strRequest As String
50
51 strArray = htmlReq.Trim.Split(" ")
52 If strArray.Length < 2 Then
53 Response("401")
54 Exit Sub
55 End If
56
57 ' Determine the HTTP method (GET only)
58 Dim strResponse As String = ""
59 If strArray(0).Trim().ToUpper.Equals("GET") Then
60 strRequest = strArray(1).Trim
61 ' do something with the data...
62 Response("something")
63
64 Else ' Not HTTP GET method
65 ' some other stuff
66 End If
67
68 Catch ex As Exception
69 Console.WriteLine(ex.StackTrace.ToString())
70
71 If clientSocket.Connected Then
72 clientSocket.Close()
73 End If
74 End Try
75 End Sub
76
77 ' Send HTTP Response
78 Public Sub Response(ByVal httpRequest As String)
79 Try
80 ' The content Length of HTTP Request
81 Dim respByte() As Byte = Encoding.Default.GetBytes(httpRequest)
82
83 ' Set HTML Header
84 Dim htmlHeader As String = _
85 "HTTP/1.0 200 OK" & ControlChars.CrLf & _
86 "Server: WebServer 1.0" & ControlChars.CrLf & _
87 "Content-Length: " & respByte.Length & ControlChars.CrLf & _
88 "Content-Type: " & getContentType(httpRequest) & _
89 ControlChars.CrLf & ControlChars.CrLf
90
91 ' The content Length of HTML Header
92 Dim headerByte() As Byte = Encoding.ASCII.GetBytes(htmlHeader)
93
94 Console.WriteLine("HTML Header: " & ControlChars.CrLf & htmlHeader)
95
96 ' Send HTML Header back to Web Browser
97 clientSocket.Send(headerByte, 0, headerByte.Length, SocketFlags.None)
98
99 ' Send HTML Content back to Web Browser
100 clientSocket.Send(respByte, 0, respByte.Length, SocketFlags.None)
101
102 ' Close HTTP Socket connection
103 clientSocket.Shutdown(SocketShutdown.Both)
104 clientSocket.Close()
105
106 Catch ex As Exception
107 Console.WriteLine(ex.StackTrace.ToString())
108
109 If clientSocket.Connected Then
110 clientSocket.Close()
111 End If
112 End Try
113 End Sub

Vllt kann mir ja jemand einen Tipp geben an welcher Ecke ich etwas schrauben kann.

Danke
Phil

Antworten
Markus B.
  • Forum-Beiträge: 636

06.05.2011, 14:40:33 via Website

Hi,
also wenn du die Meldung connection reset by peer bekommst, stimmt etwas in deinem Server nicht.
Das spricht dafür das bei dem Verbindungsaufbau und der Erstellung deines Sockets etwas nicht funktioniert bzw. zu 98% nicht nicht funktioniert.
Ich würde dir gerne helfen aber von dem VB Murks habe ich keine Ahnung ...

Gruß,
Markus

Antworten