Bonjour à tous,
Je cherche à émettre une liste de fichier depuis une application vers un serveur.
J'utilise pour cela la classe socket et la méthode SendFile()
Lorsque le client veux envoyer un message, il appelle une fonction d'un service web qui démarre un serveur d'écoute sur un port spécifique. Puis il commence l'émission.
J'ai fait ceci depuis le client:
Le prblème, je pense vient du côté du serveur où k'ai le code 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
45
46
47
48
49
50 class Client { Socket S; private int PORT; public Client(int Port) { this.PORT=Port; S = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); S.Connect(Dns.GetHostAddresses("127.0.0.1")[0], this.PORT); } public void SENDFILE(string FileName) { try { byte[] pre_buffer = Encoding.ASCII.GetBytes("#START_FILE\\" + FileName); byte[] post_buffer = Encoding.ASCII.GetBytes("#END_FILE\\"); S.SendFile(FileName, pre_buffer, post_buffer, TransmitFileOptions.UseDefaultWorkerThread); S.Close(); MessageBox.Show("Connexion fermée"); } catch (FileNotFoundException e) { new Error("File not found", e.Message); } catch (SocketException e) { new Error("error socket", e.Message); } catch (ObjectDisposedException e) { new Error("Socket closed", e.Message); } catch (InvalidOperationException e) { new Error("socket blocked", e.Message); } catch (SystemException e) { new Error("error system", e.Message); } } }
Le serveur démarre bien mais le problème doit venir de la fonciton ListenTo().
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 public class serveur { Socket C_S; Socket S_S; int PORT; string SID; byte[] buffer = new byte[4096]; int count; public serveur() { } public serveur(int PORT, string SID) { this.PORT = PORT; this.SID = SID; S_S = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } public string start() { try { new Thread(new ThreadStart(ListenTo)).Start(); return "ok"; } catch (Exception e) { return e.Message; } } private void ListenTo() { try { S_S.Bind(new IPEndPoint(IPAddress.Any, this.PORT)); S_S.Listen(1); FileStream stw; stw = System.IO.File.Create("c:\\sock.txt",4096,FileOptions.None); while((C_S=S_S.Accept())!=null) { if (C_S.Available>0) { count = C_S.Receive(buffer, 0, 4096, SocketFlags.None); stw.Write(buffer, 0, count); } else { S_S.Close(); C_S.Close(); } } stw.Close(); } catch (Exception e) { Console.WriteLine("serveur: "+e.Message); } }
Le fichier sock.txt est bien créé mais rien n'est écrit dedans.
Lorsque je tente de l'ouvrir un message d'erreur me dit qu'un autre processus est sur le fichier.
Lorsque que kill asp_wp.exe, je peux ouvrir le fichier mais rien n'est dedans.
Ques-ce qui ne va pas ???
Merci pour votre aide !!!!!
Partager