Java Socket学习笔记(二)- UDP基本使用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java Socket学习笔记(二)- UDP基本使用

Java Socket学习笔记(二)- UDP基本使用

 2014/7/31 21:18:05  kingxss  程序员俱乐部  我要评论(0)
  • 摘要:一.服务端代码:importjava.io.*;importjava.net.*;publicclassUDPEchoServer{privatestaticfinalintECHOMAX=255;//Maximumsizeofechodatagrampublicstaticvoidmain(String[]args)throwsIOException{intservPort=5500;//ServerportDatagramSocketsocket=newDatagramSocket
  • 标签:笔记 学习 使用 Java socket 学习笔记

一.服务端代码:

class="java" name="code">import java.io.*;
import java.net.*;

public class UDPEchoServer {

    private static final int ECHOMAX = 255; // Maximum size of echo datagram

    public static void main(String[] args) throws IOException {

        int servPort = 5500; // Server port

        DatagramSocket socket = new DatagramSocket(servPort);
        DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX);

        while (true) { // Run forever, receiving and echoing datagrams
            socket.receive(packet); // Receive packet from client
            System.out.println("Handling client at " + packet.getAddress().getHostAddress() + " on port "  + packet.getPort());
            socket.send(packet); // Send the same packet back to client
            packet.setLength(ECHOMAX); // Reset length to avoid shrinking buffer
        }
        /* NOT REACHED */
    }
}

?

二.客户端代码:

import java.net.*;
import java.io.*;

public class UDPEchoClientTimeout {

    private static final int TIMEOUT = 3000; // Resend timeout (milliseconds)
    private static final int MAXTRIES = 5; // Maximum retransmissions

    public static void main(String[] args) throws IOException {
        InetAddress serverAddress = InetAddress.getByName("127.0.0.1"); // Server address
        int servPort = 5500; // Server port
        // Convert the argument String to bytes using the default encoding
        byte[] bytesToSend = "Hi, World".getBytes();

        DatagramSocket socket = new DatagramSocket();
        socket.setSoTimeout(TIMEOUT); // Maximum receive blocking time(milliseconds)
        // Sending packet
        DatagramPacket sendPacket = new DatagramPacket(bytesToSend, bytesToSend.length, serverAddress, servPort);

        DatagramPacket receivePacket = // Receiving packet
        new DatagramPacket(new byte[bytesToSend.length], bytesToSend.length);

        int tries = 0; // Packets may be lost, so we have to keep trying
        boolean receivedResponse = false;
        do {
            socket.send(sendPacket); // Send the echo string
            try {
                socket.receive(receivePacket); // Attempt echo reply reception

                if (!receivePacket.getAddress().equals(serverAddress)) {// Check
                                                                        // source
                    throw new IOException("Received packet from an unknown source");
                }
                receivedResponse = true;
            } catch (InterruptedIOException e) { // We did not get anything
                tries += 1;
                System.out.println("Timed out, " + (MAXTRIES - tries) + " more tries...");
            }
        } while ((!receivedResponse) && (tries < MAXTRIES));

        if (receivedResponse) {
            System.out.println("Received: " + new String(receivePacket.getData()));
        } else {
            System.out.println("No response -- giving up.");
        }
        socket.close();
    }
}

?

? ? ?上述代码的UDP服务端是单线程,一次只能服务一个客户端。

?

?

参考:

1.《Java TCP/IP Socket编程(原书第2版)》

上一篇: Android技术5:Android SDK更新问题解决 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名