Pour une appli que je développe actuellement mais aussi pour un cours que je dois donner en fin d'année, j'ai besoin d'utiliser des sockets non bloquantes pour transférer des objets sérialisables.
je suis en train de faire des tests et je n'arrive pas à transmettre des données. J'en envoie mais je ne reçois rien.
J'envoie avec
voici la trace correspondante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Socket socket = sockChan.socket(); System.out.println(socket); OutputStream os = socket.getOutputStream(); BufferedOutputStream baos = new BufferedOutputStream(os); System.out.println("ClientSocket, sendMessage : " + request); byte[] T = getBytes(request); for(int i = 0; i < T.length ; i++){ System.out.println(i +" : " + T[i]); } baos.write(T); baos.flush();
quand au serveur, lui a
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ClientSocket, sendMessage : q 0 : -84 1 : -19 2 : 0 3 : 5 4 : 116 5 : 0 6 : 1 7 : 113
et la trace :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 try { ssChanel = ServerSocketChannel.open(); System.out.println(ssChanel.isRegistered()); serverSocket = ssChanel.socket(); Selector selector = Selector.open(); serverSocket.bind(new InetSocketAddress(5000)); System.out.println(ssChanel.isOpen()); System.out.println(ssChanel + " : Port ON"); ssChanel.configureBlocking (false); ssChanel.register (selector, SelectionKey.OP_ACCEPT); int rep = 0; while(true){ System.out.println ("Attente"); int n = selector.select(); System.out.println ("selector.select() = " + n); if (n == 0) continue; Iterator it = selector.selectedKeys().iterator(); while (it.hasNext()) { SelectionKey key = (SelectionKey) it.next(); System.out.println ("SelectionKey = "+key); System.out.println ("Acceptable()" + key.isAcceptable()) ; System.out.println ("Valid()" + key.isValid()); System.out.println ("Readable()" + key.isReadable()) ; System.out.println ("Writable()" + key.isWritable()) ; if (key.isAcceptable()) { System.out.println ("***Key Acceptable"); ServerSocketChannel server = (ServerSocketChannel)key.channel(); SocketChannel channel = server.accept(); System.out.println ("-- SocketChannel = "+channel); channel.configureBlocking (false); channel.register (selector, SelectionKey.OP_READ); } ByteBuffer buffer = ByteBuffer.allocateDirect (10240); if (key.isReadable()) { System.out.println ("***Key readable"); SocketChannel socketChannel = (SocketChannel) key.channel(); System.out.println (socketChannel); Socket socket = socketChannel.socket(); System.out.println (socket); buffer.clear();int count; count = socketChannel.read (buffer); System.out.println ("read count = "+count+ " contenu :"); byte[] T = new byte[count]; buffer.get(T); for(int i = 0; i < T.length ; i++){ System.out.println(i +" : " + T[i]); } buffer.clear(); } } } } catch(Exception e){ e.printStackTrace(); }
A noter que le message peut changer, il trouve toujours le même nombre d'octets à l'entrée et à la sortie mais j'obtient toujours que des 0 à l'arrivée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 read count = 8 contenu : 0 : 0 1 : 0 2 : 0 3 : 0 4 : 0 5 : 0 6 : 0 7 : 0
Qui peut m'aider ?
Partager