Java UDP ReceiveThenReply

来源:互联网 发布:js 对象数组 查找元素 编辑:程序博客网 时间:2024/06/05 03:26


/* 
    定义一个应用程序,用于接受udp协议传输的数据并处理 
1.定义udpsocket服务 
2.定义一个数据包类,用于存放接受到的数据包(字节数据)。并使用该类处理数据 
3.通过socket服务的receive方法接受的数据出入已定义的数据包类中 
4.使用数据包类功能处理数据 
5.关闭资源 
*/  
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;  
  
class UdpReceiveThenReply  
{  
    public static void main(String[] args)throws Exception  
    {  
        //创建UDP socket,建立端点  
        DatagramSocket ds = new DatagramSocket(10000);  //监听10000端口  
  
        //定义数据包,用于存储数据  
        byte[] buf = new byte[1024];  
        DatagramPacket dp = new DatagramPacket(buf,buf.length);           
        while(true)
{
ds.receive(dp);  
String ip = dp.getAddress().getHostAddress();   //数据提取  
String data = new String(dp.getData(),0,dp.getLength());  
int port = dp.getPort();  
System.out.println(ip+":"+port); 
System.out.println(data); 

byte[] bufReply = "UDP Reply".getBytes();  
//DatagramPacket dpReply = new DatagramPacket(bufReply,bufReply.length,InetAddress.getByName(ip),port);     
//ds.send(dpReply); 
dp.setData(bufReply,0,bufReply.length);
ds.send(dp);

}
        //ds.close();  
    }  
}  


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;


namespace UDPClient
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] data = new byte[1024];
            string input, stringData;


            //构建TCP 服务器


            Console.WriteLine("This is a Client, host name is {0}", Dns.GetHostName());


            //设置服务IP,设置TCP端口号
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10000);


            //定义网络类型,数据连接类型和网络协议UDP
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);


            string welcome = "Hello! ";
            data = Encoding.ASCII.GetBytes(welcome);
            server.SendTo(data, data.Length, SocketFlags.None, ipep);


            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            EndPoint Remote = (EndPoint)sender;


            data = new byte[1024];
            //对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制
            server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);
            int recv = 0;
            try
            {
                recv = server.ReceiveFrom(data, ref Remote);
                Console.WriteLine("Message received from {0}: ", Remote.ToString());
                Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
            }
            catch (System.Net.Sockets.SocketException e)
            {
                Console.WriteLine("Message received timeout {0}: ",e.Message);
            }
            bool a = false;
            if (!a)
            {
                server.Close();
                return;
            }


            while (true)
            {
                input = Console.ReadLine();
                if (input == "exit")
                    break;
                server.SendTo(Encoding.ASCII.GetBytes(input), Remote);
                data = new byte[1024];
                recv = server.ReceiveFrom(data, ref Remote);
                stringData = Encoding.ASCII.GetString(data, 0, recv);
                Console.WriteLine(stringData);
            }
            Console.WriteLine("Stopping Client.");
            server.Close();
        }


    }
}


/* 
 
 
    通过UDP传输方式,将一段文字数据发送出去 
1.建立udpsocket服务 
2.提供数据,并将数据封装到数据包中。 
3.通过socket服务的发送功能。将数据包发出去 
4.关闭资源 
 
类: 
    DatagramPacket  封装数据包 
    DatagramSocket  创建UDP服务 
*/  
import java.net.DatagramPacket;
import java.net.InetAddress;
  
  
import java.net.*;  
  
class UdpSend  
{  
    public static void main(String[] args)throws Exception   
    {  
        DatagramSocket ds  = new DatagramSocket();  
        byte[] buf = "UDP Demo".getBytes();  
        DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);//10000为定义的端口     
        ds.send(dp);  
        ds.close();  
    }  


0 0
原创粉丝点击