Tant qu'on y est.

Voici un équivalent de la commande socket sous Unix ou netcat sous Windows qui permet de se connecter à un serveur sur un port particulier en TCP.
On peut envoyer directement des données au clavier au serveur, et un thread s'occupe de lire toutes les données recues (ligne par ligne).

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.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
 
/**
 *  Classe dont le but est uniquement d'écouter un socket
 *  
 * @author millie
 *
 */
class Reader extends Thread {
 
	private Socket socket;
 
	public Reader(Socket s) {
		this.socket = s;
	}
 
	public void run() {
		InputStream iStream = null;
		try {
			iStream = socket.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					iStream)); // pour lire ligne par ligne
 
			String g;
			while((g=reader.readLine()) != null) {
				System.err.println(g);
			}
 
 
		} catch (IOException e) {
			e.printStackTrace();
		}
 
		try {
			iStream.close(); //on ferme tout
			socket.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
 
	}
}
 
/**
 * @author millie
 * 
 */
public class Netcat {
 
	/**
         * @param args
         */
	public static void main(String[] args) {
		String host = "www.developpez.com";
		int port = 80;
 
		Socket s = null;
		OutputStream oStream = null;
 
		BufferedReader iReader = new BufferedReader(new InputStreamReader(
				System.in)); //pour permettre la lecture des entrées au clavier
 
		try {
			s = new Socket(host, port);
 
			Reader reader = new Reader(s);
			reader.start(); //démarrage du thread d'écoute
 
			oStream = s.getOutputStream();
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
					oStream));
 
			while (true) {
				String toSend = iReader.readLine(); //lecture d'une ligne entrée au clavier
				toSend += '\n'; //ajout d'un retour à la ligne
				writer.write(toSend);
				writer.flush();
			}
 
		} catch (UnknownHostException e) {
			e.printStackTrace();
			return ;
		} catch (IOException e) {
			e.printStackTrace();
		}
 
		try {
			s.close(); //on ferme tout
			oStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
 
	}
}