Salut,
j'ai développé un serveur proxy simple multithreaded. ce programme est un proxy pour un serveur spécifique.
voici mon code:
j'aimerais tester ce proxy avec un client et un serveur. le client envoie un tableau d'entiers pour retrouver la valeur maximale de ce tableau. le serveur reçoit ce tableau, calcul le max, et rend cette valeur max. le problème est le suivant: mon proxy ne joue pas son rôle attendu. ni le tableau, ni son max ne sont reçu comme prévu. voici le code de mon serveur:
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
66
67
68
69
70
71
72
73
74
75 public class Proxy { int remotePort; InetAddress remoteHost; public Proxy(InetAddress remoteHost, int remotePort) { this.remotePort = remotePort; this.remoteHost = remoteHost; } public void go() { ExecutorService pool = Executors.newCachedThreadPool(); try (ServerSocket server = new ServerSocket(2015);) { System.out.println("Proxy is running....!"); while (true) { Socket socketClient = server.accept(); System.out.println("client connected...!"); Socket socketServeur = new Socket(remoteHost, remotePort); System.out.println("connection established with the server...!"); Worker p1 = new Worker(socketClient, socketServeur); Worker p2 = new Worker(socketServeur, socketClient); pool.execute(p1); pool.execute(p2); } } catch (Exception ex) { System.out.println(ex.getMessage()); } } class Worker implements Runnable { Socket from, to; public Worker(Socket from, Socket to) { this.from = from; this.to = to; } @Override public void run() { // System.out.println(Thread.currentThread().getName()); try (BufferedInputStream bis = new BufferedInputStream(from.getInputStream()); BufferedOutputStream bos = new BufferedOutputStream(to.getOutputStream());) { while (true) { int octet = bis.read(); if (octet == -1) { break; } bos.write(octet); } bos.flush(); from.close(); to.close(); } catch (IOException ex) { System.out.println(ex.getMessage()); } } } public static void main(String[] args) { InetAddress adr = null; try { adr = InetAddress.getLocalHost(); } catch (UnknownHostException ex) { System.out.println(ex.getMessage()); } new Proxy(adr, 2020).go(); } }
le code du client est le suivant :
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 public class ServerTCPMax { static void display(int[] tab) { for (int u : tab) { System.out.print(u + " "); } System.out.println(); } static int searchMax(int[] t) { int max = t[0]; for (int i = 1; i < t.length; i++) { if (t[i] > max) { max = t[i]; } } return max; } public static void main(String[] args) { try { ServerSocket server = new ServerSocket(2020); System.out.println("server is running .......! "); while (true) { try (Socket sclient = server.accept()) { System.out.println("Proxy connected...!"); ObjectInputStream ois = new ObjectInputStream(sclient.getInputStream()); int[] tab = (int[]) ois.readObject(); display(tab); int max = searchMax(tab); try (DataOutputStream dos = new DataOutputStream(sclient.getOutputStream())) { dos.writeInt(max); dos.flush(); } } } } catch (IOException | ClassNotFoundException ex) { System.out.println(ex.getMessage()); } } }
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 public class ClientTCPMax { public static void main(String[] args) { int[] A = {3, -7, 9, 22, 0, 7, 11, 2}; try { try (Socket socket = new Socket("127.0.0.1", 2015)) { System.out.println("connection established with the Proxy ...!"); ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); oos.writeObject(A); oos.flush(); DataInputStream dis = new DataInputStream(socket.getInputStream()); int max = dis.readInt(); System.out.println(" the max is : " + max); } } catch (IOException ex) { System.out.println(ex.getMessage()); } } }
Partager