-
Notifications
You must be signed in to change notification settings - Fork 0
/
双端通信
148 lines (135 loc) · 3.95 KB
/
双端通信
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// Server.java
import com.sun.security.ntlm.Server;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer implements Runnable{
ServerSocket server = null;
Socket clientSocket;
boolean flag = true;
Thread connectThread;
BufferedReader sin;
DataOutputStream sout;
@Override
public void run() {
while(true) {
try {
int ch;
while((ch = System.in.read()) != -1) {
sout.write((byte)ch);
if(ch == '\n') {
sout.flush();
}
}
} catch (IOException e) {
System.out.println(e);
}
}
}
public void serverStart() throws Exception {
server = new ServerSocket(8080);
System.out.println("端口号:" + server.getLocalPort());
while(flag) {
clientSocket = server.accept();
System.out.println("连接已建立");
InputStream is = clientSocket.getInputStream();
sin = new BufferedReader(new InputStreamReader(is));
OutputStream os = clientSocket.getOutputStream();
sout = new DataOutputStream(os);
connectThread = new Thread(this);
connectThread.start();
String str;
while((str = sin.readLine()) != null) {
System.out.println(str);
if(str.equals("bye")) {
flag = false;
connectThread.interrupt();
break;
}
}
sout.close();
os.close();
sin.close();
is.close();
clientSocket.close();
System.exit(0);
}
}
public void finalize() {
try {
server.close();
} catch(IOException e) {
System.out.println(e);
}
}
public static void main(String[] agrs) {
MyServer MS = new MyServer();
try{
MS.serverStart();
} catch(Exception e) {
System.out.println(e);
}
}
}
// Client.java
import com.sun.security.ntlm.Server;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class MyClient implements Runnable{
Socket clientSocket;
boolean flag = true;
Thread connectThread;
BufferedReader cin;
DataOutputStream cout;
@Override
public void run() {
while(true) {
try {
int ch;
while((ch = System.in.read()) != -1) {
cout.write((byte)ch);
if(ch == '\n') {
cout.flush();
}
}
} catch (IOException e) {
System.out.println(e);
}
}
}
public void clientStart() throws Exception {
clientSocket = new Socket("localhost",8080);
System.out.println("连接已建立");
while(flag) {
InputStream is = clientSocket.getInputStream();
cin = new BufferedReader(new InputStreamReader(is));
OutputStream os = clientSocket.getOutputStream();
cout = new DataOutputStream(os);
connectThread = new Thread(this);
connectThread.start();
String str;
while((str = cin.readLine()) != null) {
System.out.println(str);
if(str.equals("bye")) {
flag = false;
connectThread.interrupt();
break;
}
}
cout.close();
os.close();
cin.close();
is.close();
clientSocket.close();
System.exit(0);
}
}
public static void main(String[] agrs) {
try{
new MyClient().clientStart();
} catch(Exception e) {
System.out.println(e);
}
}
}