滴水穿石-13 網絡編程

1 UPD協議發送和接收java

1.1 基礎版服務器

package d13;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


/*
 * 建立stock對象
 * 打包數據
 * 發送數據
 * 釋放數據
 * */
public class UDP_Send {
    public static void main(String[] args) throws Exception {
        //01 建立對象
        DatagramSocket ds = new DatagramSocket();
        //02 打包數據  DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
        byte [] contentStr = "Hello Word !!".getBytes();
        int lengthInt = contentStr.length;
        InetAddress ip =  InetAddress.getByName("192.168.2.117");
        int portInt = 10086;
        DatagramPacket dp = new DatagramPacket(contentStr,lengthInt,ip,portInt);
        //03 發送數據
        ds.send(dp);
        //04 釋放資源
        ds.close();
    }
    
}
UDP_Send
package d13;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


/*
 * 建立stock對象
 * 建立數據包對象
 * 接收數據
 * 解析數據
 * 釋放數據
 * */
public class UDP_Receive {
    public static void main(String[] args) throws Exception {
        //01 建立對象
        int portInt = 10086;
        DatagramSocket ds = new DatagramSocket(portInt);
        //02 打包數據  DatagramPacket(byte[] buf, int length) 
        byte[] buf = new byte[1024];
        int lengthInt = 1024;    
        DatagramPacket dp = new DatagramPacket(buf,lengthInt);
        
        //03 發送數據
        ds.receive(dp);
        //04 解析數據
        String ip = dp.getAddress().getHostAddress();
        byte[] contentByte = dp.getData();
        int len = dp.getLength();
        String strContent = new String(contentByte,0,len); 
        System.out.println(ip+": "+strContent);
        //05 釋放資源
        ds.close();
    }
    
}
UDP_Receive

1.2 改進版,鍵盤錄入多線程

package d13;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


/*
 * 建立stock對象
 * 打包數據
 * 發送數據
 * 釋放數據
 * */
public class UDP_Send {
    public static void main(String[] args) throws Exception {
        //01 建立對象
        DatagramSocket ds = new DatagramSocket();
        //02 打包數據  DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while ((line = br.readLine()) != null) {
            if ("886".equals(line)) {
                break;
            }  
            byte [] contentStr =line.getBytes();
            int lengthInt = contentStr.length;
            InetAddress ip =  InetAddress.getByName("192.168.2.117");
            int portInt = 10086;
            DatagramPacket dp = new DatagramPacket(contentStr,lengthInt,ip,portInt);
            //03 發送數據
            ds.send(dp);
        }
         
        //04 釋放資源
        ds.close();
    }
    
}
UDP_Send2.0

 

2 TCP協議發送和接收數據ide

2.1 基礎版this

package d13;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/*TCP協議發送數據:
 * A:建立發送端的Stock
 * B:獲取輸出流,寫數據
 * C:釋放資源
 * */
public class TCP_Client {

    public static void main(String[] args) throws Exception {
        // A:建立發送端的Stock
        Socket s = new Socket("192.168.2.117",10087);
        //B:獲取輸出流,寫數據
        OutputStream os = s.getOutputStream();
        os.write("Hello Word !!".getBytes());
        //釋放資源
        s.close();
    }

}
TCP_Client
package d13;


import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 *建立服務端的Socket對象
 *監聽客戶端鏈接,返回一個Socket對象
 *獲取輸入流 並顯示在控制檯
 *釋放資源
 * */
public class TCP_Server {
    public static void main(String[] args) throws Exception {
        //建立服務端的Socket對象
                ServerSocket s = new ServerSocket(10087);
                //監聽客戶端鏈接,返回一個Socket對象
                Socket ss = s.accept();
                //獲取輸入流 並顯示在控制檯
                InputStream is = ss.getInputStream();
                
                byte [] bys = new byte[1024];
                int len = is.read(bys);
                String str = new String(bys,0,len);
                String ip = ss.getInetAddress().getHostAddress();
                System.out.println(ip+": "+str);
                 
                //釋放資源
                ss.close();
    }
 
}
TCP_Server

2.2 服務器端收到消息後反饋給客戶端spa

package d13;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/*TCP協議發送數據:
 * A:建立發送端的Stock
 * B:獲取輸出流,寫數據
 * C:釋放資源
 * */
public class TCP_Client {

    public static void main(String[] args) throws Exception {
        // A:建立發送端的Stock
        Socket s = new Socket("192.168.2.117",10087);
        //B:獲取輸出流,寫數據
        OutputStream os = s.getOutputStream();
        os.write("Hello Word !!".getBytes());
        //C 接收服務器端發送來的數據
        InputStream is = s.getInputStream();
        byte [] by = new byte[1024];
        int len = is.read(by);
        String ms=new String(by,0,len);
        
        System.out.println(ms);
        //釋放資源
        s.close();
    }

}
TCP_Client
package d13;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 *建立服務端的Socket對象
 *監聽客戶端鏈接,返回一個Socket對象
 *獲取輸入流 並顯示在控制檯
 *釋放資源
 * */
public class TCP_Server {
    public static void main(String[] args) throws Exception {
        //建立服務端的Socket對象
                ServerSocket s = new ServerSocket(10087);
                //監聽客戶端鏈接,返回一個Socket對象
                Socket ss = s.accept();
                //獲取輸入流 並顯示在控制檯
                InputStream is = ss.getInputStream();
                
                byte [] bys = new byte[1024];
                int len = is.read(bys);
                String str = new String(bys,0,len);
                String ip = ss.getInetAddress().getHostAddress();
                System.out.println(ip+": "+str);
                 
                //建立輸出流,將消息反饋給客戶端
                OutputStream os = ss.getOutputStream();
                os.write("信息已收到!!".getBytes());
                //釋放資源
                ss.close();
    }
 
}
TCP_Server

2.3 鍵盤錄入+高效流.net

package d13;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/*TCP協議發送數據:
 * A:建立發送端的Stock
 * B:獲取輸出流,寫數據
 * C:釋放資源
 * */
public class TCP_Client {

    public static void main(String[] args) throws Exception {
        // A:建立發送端的Stock
        Socket s = new Socket("192.168.2.117",10087);
        //B:獲取輸出流,寫數據
        OutputStream os = s.getOutputStream();
        //鍵盤錄入數據
        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 ("886".equals(line)) {
                break;
            }
            bw.write(line);
            bw.newLine();
            bw.flush();
             
        }
          
        //釋放資源
     
        s.close();
    }

}
TCP_Client
package d13;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 *建立服務端的Socket對象
 *監聽客戶端鏈接,返回一個Socket對象
 *獲取輸入流 並顯示在控制檯
 *釋放資源
 * */
public class TCP_Server {
    public static void main(String[] args) throws Exception {
                //建立服務端的Socket對象
                ServerSocket ss = new ServerSocket(10087);
                //監聽客戶端鏈接,返回一個Socket對象
                Socket s = ss.accept();
                //獲取輸入流 並顯示在控制檯
                BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                String line = null;
                while ((line=br.readLine())!=null) {
                    //String ip = ss.getInetAddress().getHostAddress();
                    System.out.println(line);
                }
             
                 
                //釋放資源
                s.close();
    }
 
}
TCP_Server

 2.4 鍵盤錄入+輸出到文本文件線程

package d13;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

/*
 * 客戶端鍵盤錄入,服務器輸出到文本文件*/
public class TCP_Client2 {
    public static void main(String[] args) throws IOException {
        //建立客戶端Socket對象
        Socket s = new Socket("192.168.2.117",23466);
        //鍵盤錄入
        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();
    }
}
TCP_Client2
package d13;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * 客戶端鍵盤錄入,服務器輸出到文本文件*/
public class TCP_Server2 {
    public static void main(String[] args) throws IOException {
        //建立服務器Socket對象
        ServerSocket ss = new ServerSocket(23466);
        
        //監聽客戶端建立
        Socket s = ss.accept();
        
        //從通道中來到文件中去
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        //封裝文本文件
        BufferedWriter bw = new BufferedWriter (new FileWriter("b.txt"));
        String line = null;
        while ((line=br.readLine())!=null) {
             bw.write(line);
             bw.newLine();
             bw.flush();
        }
        bw.close();
    }
}
TCP_Server2

2.5 文本文件錄入+控制檯輸出3d

package d13;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/*
 * 讀取文本文件,輸出到控制檯*/
public class TCP_Client3 {
    public static void main(String[] args) throws IOException {
        //建立Socket對象
        Socket s = new Socket("192.168.2.117",10087);
        
        //封裝文本文件
        BufferedReader br = new BufferedReader(new FileReader("b.txt"));
        //封裝通道內的流
        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();
        
    }
}
TCP_Client3
package d13;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class TCP_Server3 {

    public static void main(String[] args) throws IOException {
        //建立服務器對象
        ServerSocket ss = new ServerSocket(10087);
        //監聽客戶端
        Socket s = ss.accept();
        //從通道中來
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        //到控制檯
        String line = null;
        while ((line=br.readLine())!=null) {
             System.out.println(line);
        }
        s.close();
    }

}
TCP_Server3

2.6 文本文件錄入+文本文件輸出code

package d13;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCP_Client4 {

    public static void main(String[] args) throws IOException {
        // 建立Socket對象
        Socket s = new Socket("192.168.2.117", 10088);
        // 建立讀取流
        BufferedReader br = new BufferedReader(new FileReader("b.txt"));
        // 建立文件輸出流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        String line = null;
        while ((line = br.readLine()) != null) {
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        //Socket通知服務器,已經結束了
        bw.write("over");
        s.shutdownOutput();
        // 接收反饋
        BufferedReader brclient = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String msg = brclient.readLine();
        System.out.println(msg);
        // 釋放資源
        br.close();
        s.close();

    }

}
TCP_Client4
package d13;

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.net.ServerSocket;
import java.net.Socket;

public class TCP_Server4 {
    public static void main(String[] args) throws IOException {
         //建立服務器對象
        ServerSocket ss = new ServerSocket(10088);
        //建立監聽
        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) {
             
            bw.write(line);
            bw.newLine();
            bw.flush();
            
        }
        //發出成功消息
        BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        bwServer.write("文件上傳成功");
        bwServer.newLine();
        bwServer.flush();
        //bwServer.close();
        //釋放資源
        bw.close();
        s.close();
    }
}
TCP_Server4

 2.7 圖片文件錄入+圖片文件輸出

package d13;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//上傳圖片,並保存
public class TCP_Client5 {
    public static void main(String[] args) throws IOException {
        //建立Socket對象
        Socket s = new Socket("192.168.2.117", 10090);
        //讀取圖片圖片
        BufferedInputStream bi = new BufferedInputStream(new FileInputStream("a.png"));
        byte [] by = new byte[1024];
        //向通道中寫數據
        BufferedOutputStream bo = new BufferedOutputStream(s.getOutputStream());
        int len =0;
        
        while ((len=bi.read(by))>0) {
            bo.write(by,0,len);        
            bo.flush();
        }
        //通知服務器傳輸結束
        s.shutdownOutput();
        
        //結束服務器傳來的反饋
        InputStream biServer =  s.getInputStream();
        len= biServer.read(by);
        String msg =new String(by,0,len);
        System.out.println(msg);
         
        s.close();
        
    }
}
TCP_Client5
package d13;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCP_Server5 {
    public static void main(String[] args) throws IOException {
        // 建立服務端Socket
        ServerSocket ss = new ServerSocket(10090);
        // 監聽客戶端
        Socket s = ss.accept();
        // 從通道中來
        BufferedInputStream bi = new BufferedInputStream(s.getInputStream());
        // 到文件中去
        byte [] by = new byte[1024];
        BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("b.png"));
        int len =0;
        while ((len=bi.read(by))!=-1) {
            bo.write(by,0,len);
        }
        //給客戶端個反饋
        OutputStream bs = s.getOutputStream();
        bs.write("圖片上傳成功!".getBytes()); 
        bo.close();
        s.close();
    }
}
TCP_Server5

 3 一個服務器+多個客戶端(多線程)

package d13;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCP_Server5 {
    public static void main(String[] args) throws IOException {
        // 建立服務端Socket
        ServerSocket ss = new ServerSocket(10090);
        while (true) {
            // 監聽客戶端
            Socket s = ss.accept();
              new Thread(new UserThread(s)).start();    
        }
        
    }
}
TCP_Server5
package d13;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.Socket;

public class UserThread implements Runnable {

    private Socket s;
    public UserThread(Socket s) {
        this.s=s;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            // 從通道中來
            BufferedInputStream bi = new BufferedInputStream(s.getInputStream());
            // 到文件中去
            byte [] by = new byte[1024];
            String newName =System.currentTimeMillis()+".png";
            BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(newName));
            int len =0;
            while ((len=bi.read(by))!=-1) {
                bo.write(by,0,len);
            }
            //給客戶端個反饋
            OutputStream bs = s.getOutputStream();
            bs.write("圖片上傳成功!".getBytes()); 
            bo.close();
            s.close();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

}
UserThread
package d13;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//上傳圖片,並保存
public class TCP_Client5 {
    public static void main(String[] args) throws IOException {
        //建立Socket對象
        Socket s = new Socket("192.168.2.117", 10090);
        //讀取圖片圖片
        BufferedInputStream bi = new BufferedInputStream(new FileInputStream("a.png"));
        byte [] by = new byte[1024];
        //向通道中寫數據
        BufferedOutputStream bo = new BufferedOutputStream(s.getOutputStream());
        int len =0;
        
        while ((len=bi.read(by))>0) {
            bo.write(by,0,len);        
            bo.flush();
        }
        //通知服務器傳輸結束
        s.shutdownOutput();
        
        //結束服務器傳來的反饋
        InputStream biServer =  s.getInputStream();
        len= biServer.read(by);
        String msg =new String(by,0,len);
        System.out.println(msg);
         
        s.close();
        
    }
}
TCP_Client5
相關文章
相關標籤/搜索