Java 网络编程

时间:2022-07-22
本文章向大家介绍Java 网络编程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.获取主机名,IP地址

  public static void main(String[] args) throws UnknownHostException {
        
          InetAddress adress = InetAddress.getByName("n");
          String ipname = adress.getHostAddress();
          String Hostname = adress.getHostName();
          System.out.println(ipname+"---"+Hostname);
    }

2.UDP编程

客户端

/*
     * 1.创建发送的Socket对象
     * 2.创建数据并打包
     * 3.调用Socket的发送方法发送数据包
     * 4.释放资源
     * 可以运行
     */
      public static void main(String[] args) throws IOException {
        
          //创建Socket对象 
          DatagramSocket ds = new  DatagramSocket();
          //创建并打包数据
          //DatagramPacket(byte[] buf,int length,InetAddress address,int port),数据包的格式
          //1.创建要发送的字节数组
          byte[] bs = "国芳小果果".getBytes();
          //2.得到数据的长度
          int len = bs.length;
          //获得IP地址
          InetAddress address = InetAddress.getByName("n");
          //设置端口号
          int port = 8888;      
          //创建数据包
          DatagramPacket dp = new DatagramPacket(bs, len, address, port); 
          //调用Socket的发送方法发送数据包
          //send(DatagramPacket p)
          ds.send(dp);
          //释放资源
          ds.close();

    }
服务端
 /*
       * 1.创建连接的Socket对象
       * 2.创建接受数据对象
       * 2.接受数据包
       * 3.解析数据并显示在控制台
       * 3.释放资源
       */
      public static void main(String[] args) throws IOException {
        //创建UDP编程的Socket,接受数据时必须指定端口号
          DatagramSocket ds = new DatagramSocket(8888);
        //创建用于接受数据的数据包
          byte[] bs = new byte[1024];
          DatagramPacket dp = new DatagramPacket(bs, 1024);
        //接受数据
          ds.receive(dp);
          System.out.println(new String(bs));
          //释放资源
          ds.close();
    }

3.UDP实现键盘数据的传输,同时使用广播IP地址实现一对多传输

public class SocketSend {
  /*
   * 数据来自于键盘录入
   * 键盘录入数据要自己控制录入结束
   * UDP的广播IP是255.255.255.255
   */
    public static void main(String[] args) throws IOException {
          //创建Socket对象
        DatagramSocket ds = new  DatagramSocket();
          //封装键盘录入数据
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while((line = br.readLine())!=null){
            if(line.equals("886")){ //如果送入数据等于886,停止输入
                break;
            }
            //创建数据并打包
            byte[] bs = line.getBytes();
            DatagramPacket dp = new DatagramPacket(bs, bs.length,InetAddress.getByName("255.255.255.255"),10087);
            
            //发送数据
            ds.send(dp);
        }
        ds.close();
    }
}

public class SocketReceive {
     
      public static void main(String[] args) throws IOException {
         
          //创建Socket接受类
          DatagramSocket ds = new DatagramSocket(10087);
          while(true){
          //创建一个包裹
          byte[] bs = new byte[1024];
          DatagramPacket dp = new DatagramPacket(bs, bs.length);
          //接受数据
          ds.receive(dp);
          //解析数据
          String ip = dp.getAddress().getHostAddress();
          String s  = new String(dp.getData(),0,dp.getData().length);
          System.out.println("from"+ip+"data is"+s);
          }
    }

}

4.通过多线程实现在同框进行聊天

public class chatRoom {
    /*
     * 通过多线程改变程序我就可以在一个窗口里进行聊天了
     */
      public static void main(String[] args) throws IOException {
          //发送数据
          DatagramSocket dsSend = new DatagramSocket();
          DatagramSocket dsRece = new DatagramSocket(10026);
          //多线程启动接收机
          SendThread st = new SendThread(dsSend);
          ReceiveThread rt = new ReceiveThread(dsRece);
          
          //创建线程对线
          Thread t1 = new Thread(st);
          Thread t2 = new  Thread(rt);
          t1.setPriority(10);
          //启动线程
          t1.start();
          t2.start();
          
          
    }

}
public class SendThread implements Runnable{
 
    private DatagramSocket ds;
    
   public SendThread(DatagramSocket ds) {
        this.ds = ds;
    }
    @Override
    public void run() {
        try{
            
          //封装键盘录入数据
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                    while((line = br.readLine())!=null){
                        if(line.equals("886")){ //如果送入数据等于886,停止输入
                            break;
                        }
                        //创建数据并打包
                        byte[] bs = line.getBytes();
                        DatagramPacket dp = new DatagramPacket(bs, bs.length,InetAddress.getByName("255.255.255.255"),10026);
                        ds.send(dp);
                    }
                
                ds.close();
        }catch(IOException ioe){
            ioe.printStackTrace();
        }
        
    }

}
public class ReceiveThread implements Runnable{
 
    private DatagramSocket ds;
    
    public ReceiveThread(DatagramSocket ds){
        this.ds =ds;
    }
    @Override
    public void run() {
        try{
          while(true){
              //创建一个包裹
              byte[] bs = new byte[1024];
              DatagramPacket dp = new DatagramPacket(bs, bs.length);
              //接受数据
            
                ds.receive(dp);
              //解析数据
              String ip = dp.getAddress().getHostAddress();
              String s  = new String(dp.getData(),0,dp.getData().length);
              System.out.println("from"+ip+"data is"+s);
              System.out.println();
              }
        }
        catch(IOException ioe){
            ioe.printStackTrace();
        }
    }

5实现TCP的网络协议编程

public class ClientDemo {
    
     public static void main(String[] args) throws IOException {
          //创建客户端套接字
         Socket s = new Socket("n", 22222);
         //封装键盘流
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         //创建写入流
         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
         //创建临时存储
         String line = null;
         while((line=br.readLine())!=null){
             if("over".equals(line)){
                 break;
             }
             bw.write(line);
             bw.newLine();
             bw.flush();
         }
         s.close();
         
         
    }

}
public class ServerDemo {
     
     public static void main(String[] args) throws IOException {
         //创建服务器套接字
         ServerSocket ss = new ServerSocket(22222);
         //开启监听
         Socket s = ss.accept();
         //创建高效读取类,字符字节转换类,套接字字节通道流
         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//       //创建反馈流
//       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
         //创建临时存储
         String line = null;
         //提供读取
         while((line=br.readLine())!=null){
            System.out.println(line);
         }
         s.close(); 
    }

}


}

6.写到文件

 public static void main(String[] args) throws IOException {
         //创建服务器套接字
         ServerSocket ss = new ServerSocket(22222);
         //开启监听
         Socket s = ss.accept();
         //创建高效读取类,字符字节转换类,套接字字节通道流
         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//       //创建文本流
         BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
         //创建临时存储
         String line = null;
         //提供读取
         while((line=br.readLine())!=null){
            System.out.println(line);
            bw.write(line);
            bw.newLine();
            bw.flush();
         }
         s.close(); 
         bw.close();
    }

7.从文件中读取,在服务器中输出

public class ClientDemo {
    public static void main(String[] args) throws IOException {
         //创建客户端套接字
        Socket s = new Socket("n", 22222);
        //封装文本文件的读取路径
        BufferedReader br = new BufferedReader(new FileReader("SocketSend.java"));
        //创建输出流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        String line = null;
        while((line = br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        br.close();
        s.close();
        
    }

}

8,文件的上传带反馈

public class ClientDemo {
    public static void main(String[] args) throws IOException {
         //创建客户端套接字
        Socket s = new Socket("n", 22222);
        //封装文本文件的读取路径
        BufferedReader br = new BufferedReader(new FileReader("SocketSend.java"));
        //创建输出流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        //读取流
        BufferedReader brs = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line = null;
        while((line = br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        s.shutdownOutput();//提示输入结束
        
        String str = brs.readLine();
        System.err.println(str);
        //释放资源
        br.close();
        s.close();
        
    }

}

//服务端

public class ServerDemo {
     
      public static void main(String[] args) throws IOException {
         //创建服务器套接字
          ServerSocket ss = new ServerSocket(22222);
          //开启监听
          Socket s = ss.accept();
          //创建读取输入流
          BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
          //创建文本输出流
          BufferedWriter bw = new BufferedWriter(new FileWriter("CopyAction.java"));
          String line = null;
          while((line=br.readLine())!=null){ 
              bw.write(line);
              bw.newLine();
              bw.flush();
          }
          BufferedWriter bws = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
          bws.write("我收到了");
          bws.newLine();
          bws.flush();
          
          
          //释放资源
          bws.close();
          bw.close();
          s.close();
    }

}

9.上传图片

public class uploadClient {
      
    public static void main(String[] args) throws IOException {
          //创建客户端套接字Socket
        Socket s = new Socket("n",9999);
         //封装图片
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream
                (new File("C:\Users\DELL\Pictures\2015-04-25\生活\1.jpg")));
        //创建写入通道
        BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
        //创建读取
        byte[] bs = new byte[1024];
        int len = 0;
        while((len = bis.read(bs))!=-1){
            bos.write(bs,0,len);
        }
        s.shutdownOutput();
        //创建读取流
        String line = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        line = br.readLine();
        System.err.println(line);
        //释放资源
        s.close();
        bis.close();
        
    }

}
public class uploadServer {
    public static void main(String[] args) throws IOException {
         //创建服务器端套接字socket
        ServerSocket ss = new ServerSocket(9999);
        //创建监听
        Socket s = ss.accept();
        //创建字节读取流
        BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
        //创建图片复制流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("mn.jpg"));
        //读取数组
        byte[] bs = new byte[1024];
        int len = 0;
        while((len=bis.read(bs))!=-1){
            bos.write(bs,0,len);
        }
        
        //创建反馈流
        OutputStream os = s.getOutputStream();
        os.write("我收到了".getBytes());
        
        //释放资源
        os.close();
        s.close();
                
    }

}

10.多客户端与一服务器通信

public class ClientDemo {
    public static void main(String[] args) throws IOException {
         //创建客户端套接字
        Socket s = new Socket("n", 11111);
        //封装文本文件的读取路径
        BufferedReader br = new BufferedReader(new FileReader("ServerDemo.java"));
        //创建输出流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        //读取流
        BufferedReader brs = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line = null;
        while((line = br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        s.shutdownOutput();
        
        String str = brs.readLine();
        System.err.println(str);
        //释放资源
        br.close();
        s.close();
        
    }

}
public class UserThread implements Runnable{
    private Socket s;
    
    public UserThread(Socket s) {
        this.s = s;
    }
    @Override
    public void run() {
        try{
             //创建读取输入流
              BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
              //创建文本输出流
              BufferedWriter bw = new BufferedWriter(new FileWriter("CopyAction.java"));
              String line = null;
              while((line=br.readLine())!=null){ 
                  bw.write(line);
                  bw.newLine();
                  bw.flush();
              }
              BufferedWriter bws = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
              bws.write("我收到了");
              bws.newLine();
              bws.flush();
              
              
              //释放资源
              bws.close();
              bw.close();
              s.close();
        }catch(IOException ioe){
            ioe.printStackTrace();
        }
    }

}
public class UPloadServer {
      public static void main(String[] args) throws IOException {
        
          ServerSocket ss = new ServerSocket(11111);
          while(true){
              Socket s = ss.accept();
              new Thread(new UserThread(s)).start();
          }
    }
}
网络编程.jpeg