Socket-Unterschiede zwischen Windows und Ubuntu

ortauq

Aktives Mitglied
Hallo zusammen,

Ich kommuniziere mit meiner Anwendung mit einem anderen Gerät über eine Socket-Verbindung.
Ich sende eine Request und bekomme dann eine Response.

Unter Windows: Request wird gesendet -> OK kommt als Response zurück
Unter Ubuntu: Request wird gesendet -> NOT OK kommt als Response zurück.

Ich habe das ganze mittels WireShark überprüft.
Die Requests stimmen exakt überein. Byte für Byte.

Deswegen gehe ich nun davon aus, dass wohl der Unterschied im Socket-Verbindungsaufbau liegt.
Hat jemand eine Idee, wie ich an das Problem herangehen könnte? ^^"
 
Hi,
Da du keinen Code gepostet hast, der uns zeigen könnte wo das Problem sein könnte... hier ein Beispiel wie eine TCP Connection mit Server in Ubuntu und Client auf Windows (und umgekehrt) funktionieren könnte.
Server
Java:
import java.io.*;
import java.net.*;

class Server {
   public static void main(String args[]) {
      String data = "Der server ist ready..... ";
     
      try {
         ServerSocket srvr = new ServerSocket(1234);
         Socket skt = srvr.accept();
         System.out.print("Server has connected!\n");
         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         System.out.print("Sending string: '" + data + "'\n");
         out.print(data);
         out.close();
         skt.close();
         srvr.close();
      }
      catch(Exception e) {
         System.out.print("Whoops! It didn't work!\n");
      }
   }
}
Client
Java:
package plan.com;

import java.io.*;
import java.net.*;

class TCPClient {
   public static void main(String args[]) {
      try {
         Socket skt = new Socket("10.10.1.4", 1234);
         BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
         
         System.out.print("Received string: '");

         while (!in.ready()) {}
         System.out.println(in.readLine()); // Read one line and output it

         System.out.print("'\n");
         in.close();
      }
      catch(Exception e) {
         System.out.print("Whoops! It didn't work!\n");
      }
   }
}
 
Zuletzt bearbeitet:
hier ein Beispiel wie eine TCP Connection mit Server in Ubuntu und Client auf Windows (und umgekehrt) funktionieren könnte.
[...]

Das ist völliger Quatsch. Das, was das OS und Java da noch an Hilfestellung leisten ist enorm. Der TE bezieht sich auf die Daten, die direkt über das Internet gesendet werden. Sprich auch die Steuerbytes für das UDP und TCP Protokoll.

@TE:
Ich weiss jetzt nicht, das was das genau mit Java zu tun hat. Wenn du nur mit Java arbeitest wird dein Quellcode höchstwahrscheinlich dem Beispiel von knilch äneln. In diesem Fall wäre interessant, welche JREs du auf Windows und Ubuntu einsetzt (Sprich SUN, OpenJDK, Microsoft-JRE etc...).

Falls du allerdings Code schreibst, der das TCP und/oder das UDP Protokoll implementiert kann ich dir nur sagen, dass du dich extrem strikt an die Protokoll-Vorgaben halten musst. Manche OS sind kulanter gegenüber Fehlern (vorallem Windoof).
 

Zurück
Oben