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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } } }
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 } } }
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(); } }