//客户端
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();//关闭服务端
}
}
黑马程序员——TCP客户端,服务端互相发送信息
最新推荐文章于 2019-01-22 08:34:34 发布