首页 新闻 赞助 找找看

Java UDP网络编程

1
悬赏园豆:5 [待解决问题]

服务器端

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();  }   }

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

Wojoin的主页 Wojoin | 初学一级 | 园豆:197
提问于:2013-01-02 10:57
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册