http://blog.csdn.net/wjw_java/article/details/7971412
//客户端
- package com.net.tcp;
- import java.io.BufferedInputStream;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.Socket;
- /**
- * 该例子出现的问题
- * 现象:客户端和服务端都在莫名的等待,为什么?
- * 因为客户端和服务端都有阻塞式方法,这些方法没有读到结束标记,那么就一直等,而导致两端都在等待
- * @author zjw
- *
- */
- public class Tcp_Client_while {
- public static void main(String[] args) throws IOException {
- Socket soc=new Socket("127.0.0.1",10000);
- //创建读取控制台的流
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- // BufferedWriter bw_out=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
- BufferedReader br_in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
- PrintWriter pw=new PrintWriter(soc.getOutputStream(),true);//添加true表示自动刷新
- String str=null;
- while(null!=(str=br.readLine())){//读取控制台的数据
- if("over".equals(str)){
- return ; //这里也可以用break
- }
- // bw_out.write(str);
- // bw_out.newLine();//添加换行,
- // bw_out.flush();//刷新缓冲区
- pw.println(str);//三句变一句
- String in=br_in.readLine();
- System.out.println("服务端发回来的信息:"+in);
- }
- br.close();
- soc.close();
- }
- }
- //服务端
- package com.net.tcp;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- * 该例子出现的问题
- * 现象:客户端和服务端都在莫名的等待,为什么?
- * 因为客户端和服务端都有阻塞式方法,这些方法没有读到结束标记,那么就一直等,而导致两端都在等待
- * @author zjw
- *
- */
- public class Tcp_Server_while {
- public static void main(String[] args) throws IOException {
- //创建服务器端对象
- ServerSocket ss=new ServerSocket(10000);
- // //获取控制台数据
- // BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- Socket client=ss.accept();
- //获取客户端发过来的信息
- BufferedReader br_in=new BufferedReader(new InputStreamReader(client.getInputStream()));
- // BufferedWriter bw_out=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
- PrintWriter pw=new PrintWriter(client.getOutputStream(),true);//添加true表示自动刷新
- String str=null;
- while(null!=(str=br_in.readLine())){
- System.out.println("客户端发过来的信息:"+str);
- // bw_out.write(str.toUpperCase());
- // bw_out.newLine();//添加换行符
- // bw_out.flush();//刷新缓冲区
- pw.println(str.toUpperCase());//三句变一句
- }
- ss.close();//关闭服务端
- }
- }
//客户端
package com.net.tcp;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 该例子出现的问题
* 现象:客户端和服务端都在莫名的等待,为什么?
* 因为客户端和服务端都有阻塞式方法,这些方法没有读到结束标记,那么就一直等,而导致两端都在等待
* @author zjw
*
*/
public class Tcp_Client_while {
public static void main(String[] args) throws IOException {
Socket soc=new Socket("127.0.0.1",10000);
//创建读取控制台的流
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
// BufferedWriter bw_out=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
BufferedReader br_in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
PrintWriter pw=new PrintWriter(soc.getOutputStream(),true);//添加true表示自动刷新
String str=null;
while(null!=(str=br.readLine())){//读取控制台的数据
if("over".equals(str)){
return ; //这里也可以用break
}
// bw_out.write(str);
// bw_out.newLine();//添加换行,
// bw_out.flush();//刷新缓冲区
pw.println(str);//三句变一句
String in=br_in.readLine();
System.out.println("服务端发回来的信息:"+in);
}
br.close();
soc.close();
}
}
//服务端
package com.net.tcp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 该例子出现的问题
* 现象:客户端和服务端都在莫名的等待,为什么?
* 因为客户端和服务端都有阻塞式方法,这些方法没有读到结束标记,那么就一直等,而导致两端都在等待
* @author zjw
*
*/
public class Tcp_Server_while {
public static void main(String[] args) throws IOException {
//创建服务器端对象
ServerSocket ss=new ServerSocket(10000);
// //获取控制台数据
// BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Socket client=ss.accept();
//获取客户端发过来的信息
BufferedReader br_in=new BufferedReader(new InputStreamReader(client.getInputStream()));
// BufferedWriter bw_out=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
PrintWriter pw=new PrintWriter(client.getOutputStream(),true);//添加true表示自动刷新
String str=null;
while(null!=(str=br_in.readLine())){
System.out.println("客户端发过来的信息:"+str);
// bw_out.write(str.toUpperCase());
// bw_out.newLine();//添加换行符
// bw_out.flush();//刷新缓冲区
pw.println(str.toUpperCase());//三句变一句
}
ss.close();//关闭服务端
}
}