1. 程式人生 > >Server端和Client端常見的通訊方式TCP/IP和UDP

Server端和Client端常見的通訊方式TCP/IP和UDP

 1- 構造DatagramSocket例項,指定本地埠。

 2- 通過DatagramSocket例項的receive方法接收DatagramPacket,DatagramPacket中間就包含了通訊的內容。

 3-通過DatagramSocket的send和receive方法來收和發DatagramPacket.

  4-常見程式碼:
  1. // 1. 構建DatagramSocket例項,指定本地埠。  
  2. DatagramSocket socket = new DatagramSocket(servPort);  
  3. // 2. 構建需要收發的DatagramPacket報文  
  4. DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX);  
  5. while(true)  
  6. {  
  7.     // 3. 收報文  
  8.     socket.receive(packet);  
  9.     System.out.println("Handling client at " + packet.getAddress().getHostAddress()  
  10.         + " on port " + packet.getPort());  
  11.     // 4. 發報文  
  12.     socket.send(packet);  
  13.     packet.setLength(ECHOMAX);  
  14. }
4)UDP協議下Client端常見的操作:

 1-構造DatagramSocket例項。

 2-通過DatagramSocket例項的send和receive方法傳送DatagramPacket報文。

 3-結束後,呼叫DatagramSocket的close方法關閉。

 5-典型的程式碼:
  1. // 1. 構造UDP DatagramSocket物件  
  2. DatagramSocket socket = new DatagramSocket(); 
  3. // 2指定timeout時間,防止進入無限等待狀態  
  4. socket.setSoTimeout(TIMEOUT); 
  5. // 3. 構造收發的報文物件  
  6. DatagramPacket sendPacket = new DatagramPacket(bytesToSend,  
  7.     bytesToSend.length, serverAddress, servPort);  
  8. DatagramPacket receivePacket =  
  9.     new DatagramPacket(new byte[bytesToSend.length], bytesToSend.length);  
  10. // 4.指定嘗試的次數  
  11. int tries = 0;  
  12. boolean receivedResponse = false;  
  13.  do  
  14. {  
  15.     socket.send(sendPacket);  
  16.     try  
  17.     {  
  18.         socket.receive(receivePacket);  
  19.         if(!receivePacket.getAddress().equals(serverAddress))  
  20.         {  
  21.             throw new IOException("Received packet from an unknown source");  
  22.         }  
  23.         receivedResponse = true;  
  24.     }  
  25.     catch(InterruptedIOException e)  
  26.     {  
  27.         tries += 1;  
  28.         System.out.println("Timed out, " + (MAXTRIES - tries) + "");  
  29.     }  
  30. }while((!receivedResponse) && (tries < MAXTRIES));  
  31. // 根據是否接收到報文進行反饋  
  32. if(receivedResponse)  
  33. {  
  34.     System.out.println("Received: " + new String(receivePacket.getData()));  
  35. }  
  36. else  
  37. {  
  38.     System.out.println("No response -- giving up.");  
  39. }  
  40. // 5. 關閉socket  
  41. socket.close();