//服务器端///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
import java.io.Console;
import java.net.Socket;
public class socketServer {
public static void main(String[] args) {
//定义一个socket
Socket socketServer=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp)throws IOException();
//设置一个网络节点
IPEndPoint endPoint=new IPEndPoint(IPEndPoint.Any,8888);
//将socketServer绑定到网络节点上
socketServer.bind(endPoint);
//提示一个信息
Console.WriteLine("===UDP Server Is ok===\r\n IP:"+endPoint.Address+"Port:"+endPoint.Port);
//定义要发送的计算机的地址 端口为0的时候表示系统分配端口
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
//建立一个网络地址
EndPoint Remote = (EndPoint)sender;
//第三步 通过套接字收发报文
byte[] data=new byte[1024*1024];
//接受数据报文到缓冲区 并存储终结点
int receive = socketServer.ReceiveFrom(data,ref Remote);
//打印到控制台
Console.WriteLine("Message Received From {0}", Remote.ToString());
Console.WriteLine(System.Text.Encoding.UTF8.GetString(data, 0, receive));
//要发送的数据
String sendMsg="Hellow Client";
//将数据转换成字节数组
data=System.Text.Encoding.UTF8.GetBytes(sendMsg);
//将数据发送到指定的网络地址
socketServer.SendTo(data,SocketFlags.None,Remote);
socketServer.close();
}
//客户端/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
import java.io.Console;
import java.net.Socket;
import java.sql.Ref;
public class Client {
public static void main(String[] args) {
// 第一步 建立一个Socket
Socket socketClient=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
//通过套接字收发报文
Console.WriteLine("按任意键开始向服务器发送数据");
Console.ReadKey();
byte[]data=new byte[1024*1024];
String input,stringData;
IPEndPoint endPoint=new IPEndpoint(IPAddress.Parse("127.0.0.1"),8888);
data=Encoding .UTF8.GetBytes("Hello");
//将数据发送到服务器的终结点
socketClient.SendTo(data,endPoint);
//定义一个发送中节点,没有具体的IP和Port
IPEndPoint sender=new IPEndPoint(IPAddress.Any,0);
//定义一个网络地址
EndPoint Remote=(EndPoint)sender;
//重新实例化一个字节数组用于存放接受到的数据
data=new byte[1024*1024];
//接受数据,将数据保存到data数据,将远程主机的节点保存到Remote终端中
int receive=socketClient.ReceiveFrom(data,Ref Remote);
Console.WriteLine("Message Receive From{0}",Remote.toString());
Console.WriteLine(Encoding.UTF8.GetString(data,0,receive));
//连续接受数据
while(true){
//从键盘读取数据
input=Console.ReadLine();
if(input=="exit")
{
break;
}
//发送数据到Remote节点
socketClient.SendTo(Encoding.UTF8.GetBytes(input),Remote);
data=new byte[1024*1024];
//接受数据,并再次更新存储终结点
receive=socketClient.ReceiveFrom(data,ref Remote);
stringData=Encoding.UTF8.GetString(data,0,receive);
Console.WriteLine(stringData);
}
Console.WriteLine("Stopping Client");
socketClient.close();
Console.Readkey();
}
} |