Java C++ Socket

ZockerLordLP

Erfahrenes Mitglied
Hallo Community,

da ich nicht weiß ob ich es eher im C++ oder Java Bereich posten soll schreibe ich es mal hier :)

Und zwar habe ich ein Problem mit einem Socket.

Code:
public class Main {

   static Socket socket;
 
   static SocketUtil sUtil = new SocketUtil();
 
   static String ip = "192.168.178.6";
   static int port = 4242;
   static byte[] header = new byte[3];
 
 
   public static void main(String[] args) throws IOException{
     header[0] = 1;
     header[1] = 3;
     header[2] = 4;
     System.out.println(header.length);
     socket = sUtil.connectSocket(ip, port);
     sUtil.sendBytes(socket, header, 0, header.length);
   }
}


public class SocketUtil {

   public Socket connectSocket(String ip, int port){
   
     Socket socket = null;
     try {
        socket = new Socket(ip,port);
     } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
   
     return socket;
   }
 
   public void sendBytes(Socket socket, byte[] myByteArray, int start, int len) throws IOException {
    if (len < 0)
    throw new IllegalArgumentException("Negative length not allowed");
    if (start < 0 || start >= myByteArray.length)
    throw new IndexOutOfBoundsException("Out of bounds: " + start);

    OutputStream out = socket.getOutputStream();
    DataOutputStream dos = new DataOutputStream(out);

   
    if (len > 0) {
       dos.write(myByteArray);
    }
   }
 
}

Das Problem jetzt, dass ich beim C++ Server den Fehler "Fehler beim Empfangen von Client-Daten!" bzw. "Connection reset by peer".

Der Server ist dieser hier: https://github.com/THOMAS-Projekt/THOMAS/blob/master/TCPServer.cpp#L165
Zeile 165.

Wenn ich statt dos.write(myByteArray), dos.writeInt(1) benutze, kommt der Fehler: "Das Kommando Byte ist ungültig".
https://github.com/THOMAS-Projekt/THOMAS/blob/master/MotorControl.cpp#L241 Zeile 241

Wenn ich einen einfachen Java Server verwende, tritt dieses Problem nicht auf.

Code:
public static void main(String[] args) throws IOException{
   
     
       ServerSocket ssocket = new ServerSocket(1234, 10);
       Socket csocket = ssocket.accept();
       InputStream stream = csocket.getInputStream();
       byte[] data = new byte[3];
       int count = stream.read(data);
       for(int i = 0; i<data.length;i++){
         System.out.println(data);
       }
   }

Weiß einer woran das liegen könnte? Ich würde gerne das Java Programm anpassen, nicht den C++ Server
 
Hi,

ich denke der Fehler liegt darin, dass dein Java-Client die Verbindung direkt nach dem Absenden der Daten abbricht.

1) Bau mal nach dem sUtil.sendBytes(...) ein "System.out.println();" und setz dort im Debugger einen Breakpoint (Zeile 19)
2) Warum kapselst du den Socket-Outputstream in einem DataOutputStream? Schicks direkt über out.write(byte[]) raus (Zeile 46)
3) Der Socket wird nicht korrekt geschlossen, ein socket.close() fehlt im Code (in der main)

Grüße,
BK
 
Zurück