1、服务端解析:
1)使用BufferedReader 包装获得的数据,为了使连接长时间不断,必须使用while(true)
2)另外开启一个新的线程用户回复客户端,这里使用了PrintWriter 包装数据,从键盘输入数据,结束以”over”

public class SocketServer {  

public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);
final Socket socket = server.accept();

new Thread(){
public void run() {
//获得客户端发来的数据
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
System.out.println("Receive from client : " + reader.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();

new Thread(){
public void run() {
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String readline = in.readLine();
System.out.println(readline);
while(true){
out.println(readline);
System.out.println(" server send: " + readline);
readline = in.readLine();
if("over".equals(readline))
break;
}
} catch (IOException e) {
e.printStackTrace();
}
};
}.start();
}

}

2、客户端:
原里与服务器端相似,只是先输入数据,然后才得到服务器反馈的信息

public class SocketClient {  

public static void main(String[] args) throws IOException {
final Socket socket = new Socket("192.168.31.239", 10000);
//回复服务端
new Thread(){
public void run() {
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String readline = in.readLine();
System.out.println(readline);
while(true){
out.println(readline);
System.out.println(" client send: " + readline);
readline = in.readLine();
if(readline.equals("over"))
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();


new Thread(){
public void run() {
//获得客户端发来的数据
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
System.out.println("Receive from server : " + reader.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();


}

}