/*
定义一个应用程序,用于接受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();
}
}