java udp 缓冲区_Java UDP网络编程

本文介绍了Java UDP网络编程,包括服务器端和客户端的实现。服务器端通过DatagramSocket接收数据报,使用缓冲区处理数据,并能将接收到的信息写入文件。客户端则通过键盘输入信息,发送到服务器并接收服务器返回的时间信息。服务器端还包含一个计数机制,当达到一定请求数时会自动关闭。
摘要由CSDN通过智能技术生成

服务器端

import java.net.*; import java.io.*; import java.util.*; /* 在数据报通信中,发送和接收一个数据报,都需提供一个缓冲区,用来安置发送和接收到的数据报  * 服务器端  * 1.创建数据报套接字DatagramSocket  * 2.发送缓存的大小byte[]  * 3.构造数据报 DatagramPacket,用来接收长度为 length 的数据包,并将该数据报保存到发送/接收 缓冲区  * 4.用receive()方法从此套接字接收数据报  */

public class ServerThread extends Thread  //服务器端线程,用于接收信息 {  public ServerThread() {}  public void run()  {   String str1;   try   {    //创建数据报套接字并将其绑定到本地主机上的指定端口    DatagramSocket socket= new DatagramSocket(8009);    System.out.println("服务器名:"+InetAddress.getLocalHost().getHostName());        int i=0;    while(true)    {     //创建发送缓存的大小     byte[] inbuf=new byte[256];     //构造 DatagramPacket,用来接收长度为 length 的数据包     DatagramPacket packet=new DatagramPacket(inbuf,inbuf.length);     //从此套接字接收数据报包     socket.receive(packet);     i++;     //提取收到数据报中的数据并转成字符串     str1=new String(packet.getData());     //去空格     str1=str1.trim();          int port=packet.getPort();     //显示接收到的信息     if(str1.length()>0)     {      System.out.println("远程端口:"+port);      System.out.println("服务器已接收到信息:"+str1);      //将服务器端收到的信息写入文件      FileWriter fileWriter=new FileWriter("receive.txt");      fileWriter.write(str1);      System.out.println("写入数据成功 ,请查看!");      fileWriter.close();     }

//将当前时间打包成UDP数据报发送     String date=new Date().toString();     inbuf=date.getBytes();//存入发送缓存          String servername=InetAddress.getLocalHost().getHostName();     System.out.println("请发送信息给服务器《"+servername+"》");           InetAddress address=packet.getAddress();     packet=new DatagramPacket(inbuf,inbuf.length,address,port);     socket.send(packet);//发送时间UDP数据报          //统计次数     if(i>3)     {      System.out.println("已超过10个客户端请求,服务器将要自动关闭!");      socket.close();     }         }   }   catch(IOException e)   {    e.printStackTrace();   }        } }

public class UDPServer {  public static void main(String[] args)  {   UDPServer frm=new UDPServer();   System.out.println(frm.toString());  }    String strbuf=" ";  ServerThread serverThread;  public UDPServer()  {   serverThread=new ServerThread();   serverThread.start();  }

}

客户端

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

public class ClientThread extends Thread {  public ClientThread() {}    public void run()  {   String str1;   try   {    String servername=InetAddress.getLocalHost().getHostName();    System.out.println("请发送信息给服务器《"+servername+"》");        DatagramSocket socket=new DatagramSocket();//创建数据报套接字    DatagramPacket packet;//声明数据报变量    while(true)    {     //从键盘读取信息     BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));     System.out.println("请输入信息:");     str1=buf.readLine();     //存放收发数据对的缓存     byte[] outbuf =new byte[str1.length()];     outbuf=str1.getBytes();     //发送从客户端输入的信息     InetAddress address=InetAddress.getByName(servername);     packet=new DatagramPacket(outbuf,outbuf.length,address,8009);     socket.send(packet);     //接收服务器端发来的时间信息     packet=new DatagramPacket(outbuf,outbuf.length);     socket.receive(packet);     //获取数据报中的数据内容     String date=new String(packet.getData());     System.out.println("当前时间为 :"+date.toString());     socket.close();    }   }   catch(IOException e)   {    e.printStackTrace();   }    } }

public class UDPClient {  public static void main(String[] args)  {   UDPClient frm=new UDPClient();   System.out.println(frm.toString());  }  ClientThread clientThread;    public UDPClient()  {   clientThread=new ClientThread();   clientThread.start();  }   }

怎样实现服务器端统计客户端的请求数,当超过一定的请求数后服务器端将自动关闭?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值