java基礎增強:網絡編程、Tcp、Udp案例
阿新 • • 發佈:2018-08-24
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{ @Overridepublic void run() { //點名DatagramSocket快遞員 try { DatagramSocket ds = new DatagramSocket(); //書寫包裹信息,快遞單寄件人信息 Scanner sc = new Scanner(System.in); String str; while( (str = sc.nextLine())!=null) { //包裝包裹,和收件地址,快遞號 DatagramPacket dp = newDatagramPacket(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案例