zoukankan      html  css  js  c++  java
  • Java基础笔记——网络编程TCP

     

    //---------------------------------------------------------------------------服务器端多线程:就是和多个客户端连接
    1
    package com.peng.Socket_TCP; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.io.PrintWriter; 9 import java.net.Socket; 10 11 public class ServerThread extends Thread { 12 // 和本线程相关的Socket 13 Socket socket = null; 14 15 public ServerThread(Socket socket) { 16 this.socket = socket; 17 } 18 19 //线程执行的操作,响应客户端的请求 20 public void run(){ 21 InputStream is=null; 22 InputStreamReader isr=null; 23 BufferedReader br=null; 24 OutputStream os=null; 25 PrintWriter pw=null; 26 try { 27 //获取输入流,并读取客户端信息 28 is = socket.getInputStream(); 29 isr = new InputStreamReader(is); 30 br = new BufferedReader(isr); 31 String info=null; 32 while((info=br.readLine())!=null){//循环读取客户端的信息 33 System.out.println("我是服务器,客户端说:"+info); 34 } 35 socket.shutdownInput();//关闭输入流 36 //获取输出流,响应客户端的请求 37 os = socket.getOutputStream(); 38 pw = new PrintWriter(os); 39 pw.write("欢迎!"); 40 pw.flush();//调用flush()方法将缓冲输出 41 } catch (IOException e) { 42 // TODO Auto-generated catch block 43 e.printStackTrace(); 44 }finally{ 45 //关闭资源 46 try { 47 if(pw!=null) 48 pw.close(); 49 if(os!=null) 50 os.close(); 51 if(br!=null) 52 br.close(); 53 if(isr!=null) 54 isr.close(); 55 if(is!=null) 56 is.close(); 57 if(socket!=null) 58 socket.close(); 59 } catch (IOException e) { 60 e.printStackTrace(); 61 } 62 } 63 } 64 65 }

    //---------------------------------------------------------------------------单独连接
     1 package com.peng.Socket_TCP;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.io.InputStreamReader;
     7 import java.io.OutputStream;
     8 import java.io.PrintWriter;
     9 import java.net.Socket;
    10 import java.net.UnknownHostException;
    11 /*
    12  * 基于TCP的Socket通信:服务器和客户端----客户端类
    13  *         1、创建Socket类,设置连接服务器的主机和端口
    14  *         2、输出数据到服务器(注意关闭socket的输出流)
    15  *         3、输入服务器的响应(注意关闭socket的输入流)
    16  *         4、关闭资源
    17  * 
    18  *
    19  */
    20 public class SingleConnect_client {
    21 
    22     public static void main(String[] args) {
    23 
    24         try {
    25             //1.创建客户端Socket,指定服务器地址和端口
    26             Socket socket=new Socket("192.168.2.100", 8884);
    27             //2.获取输出流,向服务器端发送信息
    28             OutputStream os=socket.getOutputStream();//字节输出流
    29             PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流
    30             pw.write("呵呵呵呵");
    31             pw.flush();
    32             socket.shutdownOutput();//关闭输出流
    33             //3.获取输入流,并读取服务器端的响应信息
    34             InputStream is=socket.getInputStream();
    35             BufferedReader br=new BufferedReader(new InputStreamReader(is));
    36             String info=null;
    37             while((info=br.readLine())!=null){
    38                 System.out.println("我是客户端,服务器说:"+info);
    39             }
    40             //4.关闭资源
    41             br.close();
    42             is.close();
    43             pw.close();
    44             os.close();
    45             socket.close();
    46         } catch (UnknownHostException e) {
    47             e.printStackTrace();
    48         } catch (IOException e) {
    49             e.printStackTrace();
    50         }
    51     }
    52 
    53 }
    View Code

    //---------------------------------------------------------------------------

     1 package com.peng.Socket_TCP;
     2 
     3 import java.io.IOException;
     4 import java.net.InetAddress;
     5 import java.net.ServerSocket;
     6 import java.net.Socket;
     7 /*
     8  * 基于TCP的Socket通信:服务器和客户端----服务器类
     9  *         1、创建ServerSocket类,设置连接服务器的端口
    10  *         2、用ServerSocket对象的accept()方法创建socket对象
    11  *             3、输入客户端的数据(注意关闭socket的输入流):socket.shutdownInput();
    12  *             4、输出响应到客户端(注意关闭socket的输出流):socket.shutdownOutput();
    13  *         5、关闭资源
    14  * @author Lenovo
    15  *
    16  *
    17  *线程中就是端口指定,但是用循环来接受客户端的数据
    18  *
    19  *获取客户端的IP用的是        socket.getInetAddress()
    20  *获取Socket通信的输入流:    socket.getInputStream()     并包装
    21  *获取Socket通信的输出流:    socket.getOutputStream()    并包装
    22  *
    23  *
    24  */
    25 
    26 public class SingleConnect_server {
    27     public static void main(String[] args) {
    28         try {
    29             //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
    30             ServerSocket serverSocket=new ServerSocket(8888);
    31             Socket socket=null;
    32             
    33             //记录客户端的数量
    34             int count=0;
    35             System.out.println("***服务器即将启动,等待客户端的连接***");
    36             //循环监听等待客户端的连接
    37             while(true){
    38                 //调用accept()方法开始监听,等待客户端的连接
    39                 socket=serverSocket.accept();
    40                 //创建一个新的线程
    41                 ServerThread serverThread=new ServerThread(socket);
    42                 //启动线程
    43                 serverThread.start();
    44                 
    45                 count++;//统计客户端的数量
    46                 System.out.println("客户端的数量:"+count);
    47                 InetAddress address=socket.getInetAddress();
    48                 System.out.println("当前客户端的IP:"+address.getHostAddress());
    49             }
    50         } catch (IOException e) {
    51             e.printStackTrace();
    52         }
    53     }
    54 
    55 }
    View Code
  • 相关阅读:
    Serverless 工程实践 | Serverless 应用开发观念的转变
    如何高效学习 Kubernetes 知识图谱?
    互动赠新书|当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
    5 款阿里常用代码检测工具,免费用!
    AI与传统编译器
    OpenArkCompiler方舟编译
    传统编译原理
    LLVM基础技术图例
    双极型与低频大功率晶体管
    TVM,Relay,Pass
  • 原文地址:https://www.cnblogs.com/wqsix/p/6774355.html
Copyright © 2011-2022 走看看