bonjours a tous,
je suis entrain de faire une petite apply client serveur qui fait du calcul distribué(en principe ), le probleme c'est que mes conaissences sont tres limitées en programmation reseau donc je me suit appuye sur un programme similaires qui fait du simple "ECHO" de se que lui envoi le client pour faire mon prog.
le probleme c'est que ca bug lors des connexions mais j'ignore pourquoi.
je vous soumet mon programme si vous pouvez me filer un petit coup de main.
donc je vous explique rapidement le principe: la classe MonteCarlo fait un gros calcul(100K iteration ) donc on voudrai partagé le calcul entre plusieurs client(pour le moment j'en suis pas encore a la partie multi-thread/multi-client) donc le serveur lance le programme mais c'est les clients qui vont executer le calcul. pour cela la fonction nSimulation() de la classe MonteCarloObj fait le necessaire pour executer le code chez le client(enfait elle lui envoit un objet MonteCarloObj et il va lancer la methode simulation sur cet objet) .
voici mon code
le client
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 import java.net.*; import java.io.*; public class JabberClient { public static void main(String[] args) throws IOException, ClassNotFoundException { InetAddress addr = InetAddress.getByName("localhost"); Socket socket = new Socket(addr, 8080); try { System.out.println("socket = " + socket); // Création de l'output stream ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); // Création de l'output stream ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); while(true){ MonteCarloObj mco=(MonteCarloObj)ois.readObject(); oos.writeDouble(mco.simulation()); oos.flush(); } } finally { socket.close(); } } }
le 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 import java.io.IOException; public class JabberServer { public static void main(String[] args)throws IOException, ClassNotFoundException { String CallPutFlag = new String(); double S ; double X ; double T ; double r ; double b ; double v ; int nSteps ; int nSimulations ; CallPutFlag = "c" ; S = 40 ; X = 50 ; T = 0.5 ; r = 0.06 ; b = 0.10 ; v = 0.45 ; nSteps = 168 ; nSimulations = 100000 ; double debut=System.currentTimeMillis(); MonteCarloObj test = new MonteCarloObj(CallPutFlag, S, X, T, r, b, v, nSteps, nSimulations); double resultat = test.nSimulation();//la methode de MonteCarloObj qui lance les connexions System.out.println(System.currentTimeMillis()-debut); System.out.println("Voici le résultat " + resultat ); } }
MonteCarloObj
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 import java.io.*; import java.net.*; import java.util.Random; public class MonteCarloObj { public MonteCarloObj(String CallPutFlagArg, double SArg, double XArg, double TArg, double rArg, double bArg, double vArg, int nStepsArg, int nSimulationsArg) { CallPutFlag=new String(CallPutFlagArg); S=SArg; X=XArg; T=TArg; r=rArg; b=bArg; v=vArg; nSteps=nStepsArg; nSimulations=nSimulationsArg; } public double simulation() { Random rndm = new Random(10); double dt = T / nSteps ; double Drift = (b - v*v / 2) * dt ; double vSqrdt = v * java.lang.Math.sqrt(dt); double St=S; for (int j = 1; j<= nSteps ; j++ ) { St = St * java.lang.Math.exp(Drift + vSqrdt * rndm.nextGaussian()); } return St; } public double nSimulation() throws IOException, ClassNotFoundException { double Sum = 0, z = 1 ; if (CallPutFlag.equals("c")) {z = 1;} else if (CallPutFlag.equals("p")) {z = -1;} else {return (0);} ServerSocket serverSock = new ServerSocket(8080); try { Socket socket = serverSock.accept(); // Le prog stoppe et attend une conxn try { // Création de l'output stream ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); // Création de l'input stream ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); for (int i = 1; i<= nSimulations ; i++ ) { oos.writeObject(this); oos.flush(); double d= ois.readDouble(); Sum = Sum + Math.max(z * (d - X), 0); } } finally { System.out.println("closing..."); socket.close(); } } finally { serverSock.close(); } double MonteCarloStandardOption = java.lang.Math.exp(-r * T) * (Sum / nSimulations); return (MonteCarloStandardOption); } private String CallPutFlag; private double S ; private double X ; private double T ; private double r ; private double b ; private double v ; private int nSteps ; private int nSimulations ; }
Partager