socket編程入門

1TCP協議

[java]  view plain  copy
  1. import java.io.InputStream;  
  2. import java.io.OutputStream;  
  3. import java.net.Socket;  
  4.   
  5. /* 
  6.  * 1.Tcp協議客戶端 
  7.     建立Socket鏈接服務端(指定ip地址,端口號)經過ip地址找對應的服務器 
  8.     調用Socket的getInputStream()和getOutputStream()方法獲取和服務端相連的IO流 
  9.     輸入流能夠讀取服務端輸出流寫出的數據 
  10.     輸出流能夠寫出數據到服務端的輸入流 
  11.  */  
  12. public class Client {  
  13.     public static void main(String[] args) throws Exception{  
  14.         //建立socket鏈接服務器  
  15.         Socket socket = new Socket("127.0.0.1"12345);  
  16.         //獲取客戶端輸入流  
  17.         InputStream in = socket.getInputStream();  
  18.         //獲取客戶端輸出流  
  19.         OutputStream out = socket.getOutputStream();  
  20.         //讀取服務器發過來的數據  
  21.         byte[] arr = new byte[1024];  
  22.         int len = in.read(arr);  
  23.         //將數據轉換成字符串  
  24.         System.out.println(new String(arr,0,len));  
  25.         //客戶端向服務端寫數據  
  26.         out.write("服務器你好,我是客戶端".getBytes());  
  27.         socket.close();  
  28.     }  
  29. }  
[java]  view plain  copy
  1. import java.net.DatagramPacket;  
  2. import java.net.DatagramSocket;  
  3.   
  4. /* 
  5.  * UDP協議接收端 
  6.  * 接收Receive 
  7.     建立DatagramSocket, 指定端口號 
  8.     建立DatagramPacket, 指定數組, 長度 
  9.     使用DatagramSocket接收DatagramPacket 
  10.     關閉DatagramSocket 
  11.     從DatagramPacket中獲取數據 
  12.  */  
  13. public class Receive {  
  14.     public static void main(String[] args) throws Exception {  
  15.         // 建立碼頭  
  16.         DatagramSocket socket = new DatagramSocket(6666);  
  17.         // 建立接收數據集裝箱  
  18.         DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);  
  19.         //接收數據放到集裝箱  
  20.         socket.receive(packet);  
  21.         //接收數據  
  22.         byte[] arr = packet.getData();  
  23.         int len = packet.getLength();  
  24.         System.out.println(new String(arr,0,len));  
  25.         //關閉socket  
  26.         socket.close();   
  27.     }  
  28. }  

2UDP協議

[java]  view plain  copy
  1. import java.net.DatagramPacket;  
  2. import java.net.DatagramSocket;  
  3. import java.net.InetAddress;  
  4.   
  5. /* 
  6.  * UDP協議發送端 
  7.  * 發送Send 
  8.         建立DatagramSocket, 隨機端口號 
  9.         建立DatagramPacket, 指定數據, 長度, 地址, 端口 
  10.         使用DatagramSocket發送DatagramPacket 
  11.         關閉DatagramSocket 
  12.  */  
  13. public class Send {  
  14.     public static void main(String[] args) throws Exception {  
  15.         String message ="what your name?";  
  16.         //建立碼頭  
  17.         DatagramSocket socket = new DatagramSocket();  
  18.         //建立集裝箱  
  19.         DatagramPacket packet =   
  20.                 new DatagramPacket(message.getBytes(), message.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);  
  21.         socket.send(packet);  
  22.         socket.close();  
  23.     }  
  24. }  

[java]  view plain  copy
  1. /* 
  2.  * TCP協議服務端 
  3.     建立ServerSocket(須要指定端口號) 
  4.     調用ServerSocket的accept()方法接收一個客戶端請求,獲得一個Socket 
  5.     調用Socket的getInputStream()和getOutputStream()方法獲取和客戶端相連的IO流 
  6.     輸入流能夠讀取客戶端輸出流寫出的數據 
  7.     輸出流能夠寫出數據到客戶端的輸入流 
  8.  */  
  9. public class Server {  
  10.     public static void main(String[] args) throws Exception {  
  11.         ServerSocket server = new ServerSocket(12345);  
  12.         // 接收客戶端的請求  
  13.         Socket socket = server.accept();  
  14.         // 獲取服務器輸入流  
  15.         InputStream in = socket.getInputStream();  
  16.         // 獲取服務器輸出流  
  17.         OutputStream out = socket.getOutputStream();  
  18.         // 服務器向客戶端寫出數據  
  19.         out.write("百度一下,你就知道".getBytes());  
  20.         // 讀取客戶端發過來的數據  
  21.         byte[] arr = new byte[1024];  
  22.         int len = in.read(arr);  
  23.         // 將數據轉換成字符串  
  24.         System.out.println(new String(arr, 0, len));  
  25.         socket.close();  
  26.     }  
  27. }  

3總結

  1 Socket套接字概述:java

      網絡上具備惟一標識的IP地址和端口號組合在一塊兒才能構成惟一能識別的標識符套接字。數組

      通訊的兩端都有Socket。至關於一個港口,用於發送和接收數據的服務器

      網絡通訊其實就是Socket間的通訊。網絡

      數據在兩個Socket間經過IO流傳輸。socket

      Socket在應用程序中建立,經過一種綁定機制與驅動程序創建關係,告訴本身所對應的IP和port。tcp

  2服務器與客戶端的概念ide

      第一次主動方就是客戶端,被動方就是服務器,這些名詞,只是一種喻意辭也有可能大家實際上都是客戶端url

   3兩種協議的實際案例spa

      網絡直播就是採用的UDP協議, 信號很差 視頻卡了,可是仍是一直髮送數據,信號恢復了,就直接是信號恢復後的數據了,信號很差那個時間段的數據已經消失了.net

      遊戲通常不採起tcp協議的,由於他沒有必須保證數據的完整服務器收到了,就讓你移動,服務器沒受到,就不讓你移動

相關文章
相關標籤/搜索