1. 程式人生 > >java基礎增強:網絡編程、Tcp、Udp案例

java基礎增強:網絡編程、Tcp、Udp案例

nbsp dwr 輸入 生命 auto 方法 pub ethos gen

一入編程深似海,從此妹子是路人。

1、Udp的客戶端,服務端-----DatagramSocket

通過Udp協議編寫一個群聊室,具體實現代碼如下:

package day.by.day.udp.charroom;
//客戶端代碼
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class Client implements Runnable{

    @Override
    
public void run() { //點名DatagramSocket快遞員 try { DatagramSocket ds = new DatagramSocket(); //書寫包裹信息,快遞單寄件人信息 Scanner sc = new Scanner(System.in); String str; while( (str = sc.nextLine())!=null) { //包裝包裹,和收件地址,快遞號 DatagramPacket dp = new
DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"),8888); //給快遞員送走 ds.send(dp); if( "over".equals(str)) { break; } } ds.close(); sc.close(); }
catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package day.by.day.udp.charroom;
//服務端代碼
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class sever implements Runnable{

    @Override
    public void run() {
        try {
            DatagramSocket ds = new DatagramSocket(8888);
            DatagramPacket dp = new DatagramPacket(new byte[64*1024], 64*1024);
            while( true) { 
                ds.receive(dp);
                byte[] bs = dp.getData();
                int len = dp.getLength();
                InetAddress ip = dp.getAddress();
                System.out.println(ip.getHostAddress()+":"+new String(bs,0,len));
            }
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

}
package day.by.day.udp.charroom;
//執行程序
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Run {

    public static void main(String[] args) throws Exception {
        //用線程池的方法
        ExecutorService pool = Executors.newCachedThreadPool();
        pool.execute(new Client());
        Thread.sleep(10);
        pool.execute(new sever());
    }

}

2、Tcp借助字節流傳輸數據,客戶端---Socker, 服務端----ServerSocket

通過Tcp協議實現多級文件夾的拷貝,具體實現代碼如下:

package day.by.day.tcp.copyflioder;
//客戶端代碼
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class CopyFlioderTcpClient {

    public static void main(String[] args) {
        //獲取文件
        File folder = new File("d:/pic",".jpg");
        String[] list = folder.list();
        for (String file : list) {
            
            try {
                Socket s = new Socket("127.0.0.1",8888);
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
                BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
                //開始讀取文件信息
                byte[] brr = new byte[1024];
                int len;
                while((len = bis.read(brr))!=-1) { 
                    bos.write(brr,0,len);
                    bos.flush();
                }
                s.shutdownOutput();
                
                BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                System.out.println(br.readLine());
                bis.close();
                s.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        
    }

}
package day.by.day.tcp.copyflioder;
//服務端代碼
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

import day.by.day.shangchuantupian.test.SeverSocker;

public class CopyFiloderSever {

    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(8888);
            while( true) { 
                Socket s = ss.accept();
                File file = new File("d:/", System.currentTimeMillis()+".jpg");
                BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
                byte[] brr = new byte[1024];
                int len;
                while( ( len = bis.read(brr))!=-1) { 
                    bos.write(brr,0,len);
                    bos.flush();
                }
                
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                bw.write("chenggong");
                bw.newLine();
                bw.flush();
                bos.close();
                s.close();
                ss.close();
                
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

3、Tcp借助字節流傳輸數據,客戶端---Socker, 服務端----ServerSocket

通過Tcp協議實現圖片的上傳,具體實現代碼如下:

package day.by.day.shangchuantupian.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
//客戶端代碼
public class SockerClient {

    public static void main(String[] args) {
        //創建socket對象獲取IP地址和端口號
      try {
        Socket s = new Socket("127.0.0.1",8888);
        //創建緩沖字節輸入流,用來獲取本地圖片的字節信息
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Usersi\\Desktop/222.jpg"));
        //在IO流池中獲取輸出字節流
        BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
        //開始讀取圖片信息
        //創建緩沖數組
       byte[] brr = new byte[1024];
       int len;
       while( ( len = bis.read(brr))!=-1) { 
           bos.write(brr);
           bos.flush();
       }
       s.shutdownOutput();
       
       //就接受服務端返回的信息
       //創建緩沖輸入字符流
       BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
       System.out.println( br.readLine());
       s.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }

}
package day.by.day.shangchuantupian.test;
//服務端代碼
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class SeverSocker implements Runnable{
    private Socket s;
    
    public SeverSocker(Socket s) {
        this.s = s;
    }

    @Override
    public void run() {
        //創建緩沖字節輸入流
        try {
            BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
            //創建緩沖字節輸出流,用於生命復制圖片的地址
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:/"+System.currentTimeMillis()+".jpg"));
            //讀取流中的圖片信息
            //定義緩沖數組
            byte[] brr = new byte[1024];
            int len;
            while( ( len = bis.read(brr))!=-1) { 
                bos.write(brr,0,len);
                bos.flush();
            }
            
            //向客戶端返回信息
            //定義緩沖字符輸出流
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bw.write("上傳成功");
            bw.newLine();
            bw.flush();
            s.close();
        } catch (Exception e) {
            //處理異常
            System.out.println("上傳失敗");
            if( null != s) { 
                try {
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                    bw.write("上傳成功");
                    bw.newLine();
                    bw.flush();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            } 
            e.printStackTrace();
        }finally {
            if( null != s) { 
                try {
                    s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
    }
    
   

}
package day.by.day.shangchuantupian.test;
//執行代碼
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Test {

    public static void main(String[] args) {
        //創建seversocket對象鏈接端口號
        try {
            ServerSocket ss = new ServerSocket(8888);
            while( true) { 
                //接收客戶端信息
                Socket s = ss.accept();
                //調用多線程
                new Thread(new SeverSocker(s)).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}

結束語:經得住誘惑,耐得住寂寞。

java基礎增強:網絡編程、Tcp、Udp案例