直接上代碼:
服務(wù)器:
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.ServerSocket;
import java.net.Socket;
public class SeverSocketDemo {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8700);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
while (!((info = br.readLine()) == null)) {
System.out.println("我是服務(wù)器恢口,客戶端給我發(fā)過(guò)來(lái)的信息是:" + info);
}
String reply = "朕知道了";
OutputStream os = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(reply);
bw.close();
os.close();
br.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客戶端:
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;
public class Consumer {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8700);
String info = "桃花帶露濃";
OutputStream os = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(info);
InputStream is = socket.getInputStream();
socket.shutdownOutput();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String reply = null;
while (!((reply = br.readLine()) == null)) {
System.out.println("我是客戶端,服務(wù)器給我的回復(fù)是" + reply);
}
br.close();
is.close();
bw.flush();
bw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
結(jié)果運(yùn)行的時(shí)候存在異常:
java.net.SocketException: Socket closed
但是如果客戶端不再使用BufferedWriter穷躁,而是直接使用OutputStream去寫的時(shí)候則不會(huì)出現(xiàn)問(wèn)題耕肩,此時(shí)客戶端代碼如下:
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;
public class Consumer {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8700);
String info = "桃花帶露濃";
OutputStream os = socket.getOutputStream();
os.write(info.getBytes());
InputStream is = socket.getInputStream();
socket.shutdownOutput();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String reply = null;
while (!((reply = br.readLine()) == null)) {
System.out.println("我是客戶端,服務(wù)器給我的回復(fù)是" + reply);
}
br.close();
is.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
此時(shí)運(yùn)行結(jié)果正常问潭,不知道為什么猿诸。