一个简单的java UDP网络编程

初次学习java的网络编程,看着书上以及网上查到的一些知识自己写了下服务器及客户端的代码

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * Created by 123456 on 2017/3/18.
 */
public class UDPEchoserver {
    private static final int ECHOMAX = 100; //接收缓冲区的大小

    public static void main(String[] args) throws IOException {
	int servPort = 12345;  
        DatagramSocket socket = new DatagramSocket(servPort); //创建服务器端的套接字
        DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX],ECHOMAX); //创建数据报文

        while (true){
            socket.receive(packet);
            String recvstr = new String(packet.getData() , 0 ,packet.getLength());
            System.out.println( recvstr);//接收数据报文并打印源地址和端口号
            int port = packet.getPort();
            InetAddress addr = packet.getAddress();
            String sendStr = "hello ! I'm server";
            byte[] sendBuf;
            sendBuf = sendStr.getBytes();
            DatagramPacket sendpacket = new DatagramPacket(sendBuf,sendBuf.length,addr,port);
            System.out.println("Handling client at " + packet.getAddress().getHostAddress() +
            " on port "+ packet.getPort());
            socket.send(sendpacket);//发送信息
        }
    }

}

import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
 * Created by yy on 2017/3/18.
 */
public class UDPEchoClientTimeout {
    private static final int TIMEOUT = 3000; //设置超时间隔
    private static final int MAXTRIES = 5;	//设置连接次数

    public static void main (String [] args)throws IOException{
        Scanner input = new Scanner(System.in);
        String sendStr = input.next(); //输入要发送的内容
        byte[] sendbuf;
        sendbuf = sendStr.getBytes();
        InetAddress serverAddress = InetAddress.getByName("127.0.0.1");
        int port = 12345;  //创建端口号及地址
        DatagramSocket socket = new DatagramSocket();

        socket.setSoTimeout(TIMEOUT);

        DatagramPacket sendPacket = new DatagramPacket(sendbuf,sendbuf.length,serverAddress,port);//发送数据报文
        DatagramPacket receivePacket = new DatagramPacket(new byte[100],100);//设置接收的范围
        int tries = 0;
        boolean receivedResponse = false;
        do {
            socket.send(sendPacket);
            try {
                socket.receive(receivePacket);
                receivedResponse = true;
            }catch (InterruptedIOException e){
                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();
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值