JAVA网络编程之TCP传输

一、多线程网络编程(TCP协议)

1.客户端

  • 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
  • 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
  • 输入流可以读取服务端输出流写出的数据
  • 输出流可以写出数据到服务端的输入流
public static void main(String[] args) throws UnknownHostException, IOException {
   Socket socket = new Socket("127.0.0.1", 12345);
   //将字节流包装成了字符流
   BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));       
   //PrintStream中有写出换行的方法
   PrintStream ps = new PrintStream(socket.getOutputStream());                
   
   System.out.println(br.readLine());
   ps.println("你好");
   System.out.println(br.readLine());
   ps.println("大家好");
   
   socket.close();
}

 注:

  • 此处不适用BufferedWriter的原因:BufferedReader中readLine()方法以读入换行符(\r\n)为结束标志,而PrintStream中的println()方法比BufferedWriter中newLine()方法更加方便,所以此处推荐使用PrintStream。
  • PrintStream必须使用println()输出,如果使用print()方法可能导致死锁。

2.服务器 

  • 创建ServerSocket(需要指定端口号)
  • 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
  • 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
  • 输入流可以读取客户端输出流写出的数据
  • 输出流可以写出数据到客户端的输入流
public static void main(String[] args) throws IOException {
   ServerSocket server = new ServerSocket(12345);
   
   while(true) {
      final Socket socket = server.accept();                //接受客户端的请求
      new Thread() {
         public void run() {
            try {
               BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));       //将字节流包装成了字符流
               PrintStream ps = new PrintStream(socket.getOutputStream());                //PrintStream中有写出换行的方法
               
               ps.println("你好");
               System.out.println(br.readLine());
               ps.println("再见");
               System.out.println(br.readLine());
               socket.close();
            } catch (IOException e) {
               
               e.printStackTrace();
            }
         }
      }.start();
   }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值