Server端和Client端常見的通訊方式TCP/IP和UDP
阿新 • • 發佈:2019-01-05
1- 構造DatagramSocket例項,指定本地埠。
2- 通過DatagramSocket例項的receive方法接收DatagramPacket,DatagramPacket中間就包含了通訊的內容。
3-通過DatagramSocket的send和receive方法來收和發DatagramPacket.
4-常見程式碼:- // 1. 構建DatagramSocket例項,指定本地埠。
- DatagramSocket socket = new DatagramSocket(servPort);
- // 2. 構建需要收發的DatagramPacket報文
- DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX);
- while(true)
- {
- // 3. 收報文
- socket.receive(packet);
- System.out.println("Handling client at " + packet.getAddress().getHostAddress()
- + " on port " + packet.getPort());
- // 4. 發報文
- socket.send(packet);
- packet.setLength(ECHOMAX);
- }
1-構造DatagramSocket例項。
2-通過DatagramSocket例項的send和receive方法傳送DatagramPacket報文。
3-結束後,呼叫DatagramSocket的close方法關閉。
5-典型的程式碼:- // 1. 構造UDP DatagramSocket物件
- DatagramSocket socket = new DatagramSocket();
- // 2指定timeout時間,防止進入無限等待狀態
- socket.setSoTimeout(TIMEOUT);
- // 3. 構造收發的報文物件
- DatagramPacket sendPacket = new DatagramPacket(bytesToSend,
- bytesToSend.length, serverAddress, servPort);
- DatagramPacket receivePacket =
- new DatagramPacket(new byte[bytesToSend.length], bytesToSend.length);
- // 4.指定嘗試的次數
- int tries = 0;
- boolean receivedResponse = false;
- do
- {
- socket.send(sendPacket);
- try
- {
- socket.receive(receivePacket);
- if(!receivePacket.getAddress().equals(serverAddress))
- {
- throw new IOException("Received packet from an unknown source");
- }
- receivedResponse = true;
- }
- catch(InterruptedIOException e)
- {
- tries += 1;
- System.out.println("Timed out, " + (MAXTRIES - tries) + "");
- }
- }while((!receivedResponse) && (tries < MAXTRIES));
- // 根據是否接收到報文進行反饋
- if(receivedResponse)
- {
- System.out.println("Received: " + new String(receivePacket.getData()));
- }
- else
- {
- System.out.println("No response -- giving up.");
- }
- // 5. 關閉socket
- socket.close();