TCP通信中,BufferedWriter和PrintWriter用来实现输出流的实现方式与区别
2015-05-22 17:05
423 查看
区别:
1. PrintWriter的print、println方法可以接受任意类型的参数,而BufferedWriter的write方法只能接受字符、字符数组和字符串;
2. PrintWriter的println方法自动添加换行,BufferedWriter需要显示调用newLine方法;
3. PrintWriter的方法不会抛异常,若关心异常,需要调用checkError方法看是否有异常发生;
4. PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush);
5. PrintWriter的构造方法更广。
在网络TCP编程中,可以使用PrintWriter,也可以使用BufferedWriter,代码如下:
服务器端:
客户端:
1. PrintWriter的print、println方法可以接受任意类型的参数,而BufferedWriter的write方法只能接受字符、字符数组和字符串;
2. PrintWriter的println方法自动添加换行,BufferedWriter需要显示调用newLine方法;
3. PrintWriter的方法不会抛异常,若关心异常,需要调用checkError方法看是否有异常发生;
4. PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush);
5. PrintWriter的构造方法更广。
在网络TCP编程中,可以使用PrintWriter,也可以使用BufferedWriter,代码如下:
服务器端:
package TCP; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.*; public class MyTcp { private BufferedReader reader; private ServerSocket server; private Socket socket; void getserver(){ try { server=new ServerSocket(8998); System.out.println("服务器套接字已经创建成功"); while(true) { System.out.println("等待客户机连接"); socket=server.accept(); reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); getClientMessage(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void getClientMessage() { // TODO Auto-generated method stub try { while(true) { System.out.println("客户机:"+reader.readLine()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(reader!=null) reader.close(); if(socket!=null) socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String args[]) { MyTcp tcp = new MyTcp(); tcp.getserver(); } }
客户端:
package 网络通信客户端; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import javax.swing.JFrame; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.border.BevelBorder; public class MyClient extends JFrame{ private BufferedWriter writer; //private PrintWriter writer; Socket socket; private JTextArea ta = new JTextArea(); private JTextField tf=new JTextField(); Container cc; public MyClient(String title) { super(title); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); cc=this.getContentPane(); final JScrollPane scrollPane=new JScrollPane(); scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED)); getContentPane().add(scrollPane,BorderLayout.CENTER); scrollPane.setViewportView(ta); cc.add(tf,"South"); tf.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub try { writer.write(tf.getText()); writer.newLine(); writer.flush();//使用BufferedWriter和PrintWriter都行,后者更方便,PrintWriter拥有跨平台的换行符输入,且自动刷新。 //writer.println(tf.getText); ta.append(tf.getText()+'\n'); ta.setSelectionEnd(ta.getText().length()); tf.setText(""); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); } private void connect(){ ta.append("尝试连接\n"); try { socket = new Socket("127.0.0.1",8998); writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //writer=new PrintWriter(socket.getOutpuStream()); ta.append("完成连接"); } catch (Exception e) { // TODO: handle exception } } public static void main(String args[]) { MyClient client = new MyClient("向服务器发送数据"); client.setSize(200,200); client.setVisible(true); client.connect(); } }
相关文章推荐
- 17、TCP和UDP网络通讯的区别及实现方式
- java分布式开发TCP/IP NIO无阻塞 Socket((基于消息方式实现系统间的通信) )(转)
- 远程通信的几种选择(RPC,Webservice, JMS的区别,其实都是SOA的一种实现方式)
- TCP和UDP网络通讯的区别及实现方式
- [分布式java]基于JavaAPI实现消息方式的系统间通信:TCP/IP+BIO
- JAVA系列课程讲座一:使用Socket通信实现网络通信程序(TCP方式)
- 【java面试系列之网络编程】TCP和UDP的区别、TCP协议的三次握手和四次挥手、TCP协议的通信状态、网络编程时的同步、异步、阻塞、非阻塞、进程间的通信方式、TCP的流量控制和拥塞控制
- HTTP 和 SCOKET 通信的区别? TCP,UDP 的连接方法?HTTP 几种常用方式
- [分布式java]基于JavaAPI实现消息方式的系统间通信:TCP/IP+NIO
- TCP和UDP网络通讯的区别及实现方式
- TCP通信中,服务器端实现方式(SELECT)
- TCP和UDP网络通讯的区别及实现方式
- TCP和UDP网络通讯的区别及实现方式
- TCP和UDP网络通讯的区别及实现方式
- Java线程的方式实现TCP通信的小案例
- QT5实现简单的TCP通信
- Java中有两种实现多线程的方式的区别
- 用Go实现的简易TCP通信框架
- java实现二叉树的三种遍历方式,并把二叉树转为双向链表,输出二叉树
- TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞