Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bytes corrompus

    25 janvier 2015 à 15:15:13

    Salut salut,

    j'ai un soucis assez génant avec mes serveurs de sockets.... (multi client hein, pour un mmo)

    Alors voilà, jusqu’à présent j'utilisais Mina, qui fonctionnais très bien jusqu'a que je décide de zipper les données. Dans certains cas cela foirait et étant donné la complexité de Mina j'ai décider de faire mon propre système sans librairie.

    Donc : J'ai actuellement un simple serveur/client multi thread et quand j'envoie des bytes ils arrivent changé!

    La première ligne c'est ce qui est envoyé, la seconde c'est ce qui est reçu. Sachant que je ne fais que des échanges de bytes. Pourriez vous me donner un coup de main (si vous avec besoin de plus d'infos n'hésitez pas!)

    31 -117 8 0 0 0 0 0 0 0 43 79 -52 73 -52 78 4 0 41 -56 -18 -121 6 0 0 0
    31 57   8 0 0 0 0 0 0 0 43 79 -52 73 -52 78 4 0 41 -56 -18 33   6 0 0 0


    Merci d'avance!

    -
    Edité par Walaka 25 janvier 2015 à 15:15:27

    • Partager sur Facebook
    • Partager sur Twitter
      27 janvier 2015 à 11:09:01

      En quoi cela à a voir avec Java... Parce que c'est du Java?
      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2015 à 11:10:17

        J'en profite pour dire que j'ai réussis, côté réception j'écoute des chars, j'en fais des string et quand le byte est complet je le transforme en byte, puis en byte[]. Mais il y à mieux, quelqu'un à déjà eut et résolut ce soucis?
        • Partager sur Facebook
        • Partager sur Twitter
          27 janvier 2015 à 11:12:43

          le mieux serais avoir un code
          • Partager sur Facebook
          • Partager sur Twitter
          Un homme azerty en vaut deux.
            27 janvier 2015 à 18:10:22

            Je l'ai dis, c'est un serveur de socket classique.

            Réception :

            package org.walaka.llfs.client;
            
            import java.io.BufferedReader;
            import java.io.IOException;
            import java.io.InputStream;
            import java.io.InputStreamReader;
            import java.io.PrintWriter;
            import java.net.Socket;
            import java.net.UnknownHostException;
            
            public class LlfsClient implements Runnable {
            	
            	private Socket socket;
            	private BufferedReader in;
            	private PrintWriter out;
            	
            	private Thread thread;
            	
            	String host = "";
            	int port = 0;
            	
            	public LlfsClient(String host, int port) {
            		this.host = host;
            		this.port = port;
            		
            		try {
            			this.socket = new Socket(host, port);
            			
            			InputStream stream = this.socket.getInputStream();
            			InputStreamReader streamReader = new InputStreamReader(stream);
            			
            			in = new BufferedReader(streamReader);
            			out = new PrintWriter(socket.getOutputStream());
            			
            			this.thread = new Thread(this);
            			this.thread.setDaemon(false);
            			this.thread.start();
            		} catch (UnknownHostException e) {
            			e.printStackTrace();
            		} catch (IOException e) {
            			e.printStackTrace();
            		}
            	}
            	
            	public void run() {
            		try {
            			StringBuilder sb = new StringBuilder();
            			char[] cur = new char[1];
            			
            			while(in.read(cur, 0, 1) != -1) {
            				if(cur[0] == '\r') {
            					System.out.println("end bytes");
            				} else if(cur[0] == '\n') {
            					//ajout d'un byte
            					byte b = Byte.parseByte(sb.toString());
            					sb = new StringBuilder();
            					
            
            					System.out.println(b);
            				} else sb.append(cur[0]);
            			}
            		} catch(Exception e) {
            			e.printStackTrace();
            		}
            	}
            	
            	public Socket getSocket() {
            		return socket;
            	}
            	
            	public void setSocket(Socket socket) {
            		this.socket = socket;
            	}
            	
            	public Thread getThread() {
            		return thread;
            	}
            	
            	public void setThread(Thread thread) {
            		this.thread = thread;
            	}
            }


            Serveur :

            package org.walaka.llfs.server;
            
            import java.io.BufferedReader;
            import java.io.IOException;
            import java.io.InputStream;
            import java.io.InputStreamReader;
            import java.io.OutputStream;
            import java.io.PrintWriter;
            import java.net.Socket;
            
            import org.walaka.utils.ByteUtils;
            
            public class LlfsClient implements Runnable {
            	
            	public static long num = 0;
            	private long id;
            
            	private Socket socket;
            	private BufferedReader in;
            	private PrintWriter out;
            	
            	private Thread thread;
            	
            	public LlfsClient(Socket socket) {
            		this.socket = socket;
            		
            		num++;
            		this.id = num;
            		
            		LlfsServer.server.getHandler().message("new client", id);
            		
            		try {			
            			InputStream stream = this.socket.getInputStream();
            			InputStreamReader streamReader = new InputStreamReader(stream);
            			
            			in = new BufferedReader(streamReader);
            			out = new PrintWriter(socket.getOutputStream());
            		} catch(Exception e) {
            			e.printStackTrace();
            		}
            		
            		this.thread = new Thread(this);
            		this.thread.setName("LLFS-client-" + this.id);
            		this.thread.setDaemon(false);
            		this.thread.start();
            		
            		send("blabla");
            	}
            	
            	public void run() {
            		
            	}
            	
            	public long getId() {
            		return id;
            	}
            	
            	public void setId(long id) {
            		this.id = id;
            	}
            	
            	public void send(String s) {
            		byte[] bytes = ByteUtils.compress(s).toByteArray();
            		
            		for(byte b : bytes) this.out.print(b + "\n");
            		this.out.print("\r");
            		this.out.flush();
            	}
            }
            


            Actuellement cela marche comme je veux, mais j'aimerais passer par autre chose que des String.

            -
            Edité par Walaka 27 janvier 2015 à 18:11:01

            • Partager sur Facebook
            • Partager sur Twitter

            Bytes corrompus

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown