zoukankan      html  css  js  c++  java
  • 网络Socket编程UDP协议例子

    服务端代码

     1 public class UDPChatServer {
     2     //通讯端口
     3     private Integer port=8000;
     4     //数据报文的通讯通道对象
     5     private DatagramChannel channel;
     6     //发送数据的最大大小
     7     private final Integer MAX_SIZE=1024;
     8     
     9     private Charset charset=Charset.forName("UTF-8");
    10 
    11     public UDPChatServer() throws IOException {
    12         //DatagramChannel本身的open方法返回一个DatagramChannel对象
    13         channel=DatagramChannel.open();
    14         //获取数据报的socket对象UDP 的socket
    15         DatagramSocket socket=channel.socket();
    16         //将socket对象绑定上本地的端口
    17         SocketAddress address=new InetSocketAddress(port);
    18         socket.bind(address);
    19         System.out.println("server started!");
    20     }
    21     private void service(){
    22         //初始化一个新的字节缓存对象容量为MAX_SIZE=1024 个字节。
    23         ByteBuffer receiveBuffer=ByteBuffer.allocate(MAX_SIZE);
    24         while (true){
    25               //将缓存中的数据清空
    26             receiveBuffer.clear();
    27             try {
    28                 //从渠道中获取固定大小的数据,获取client连接
    29                InetSocketAddress client= (InetSocketAddress) channel.receive(receiveBuffer);
    30                //客户端每次请求到receiveBuffer里
    31                 //设置buffer指针的下标0。这样就可以从buffer开头,对该buffer进行遍历(读取)了
    32                 receiveBuffer.flip();
    33                 //将字节数据转为字符串 
    34                 String msg= charset.decode(receiveBuffer).toString();
    35                 System.out.println(String.format("new data :%s %s %s ",client.getAddress(),client.getPort(),msg));
    36                 //应答client 发送数据到通道中的客户端
    37                 channel.send(ByteBuffer.wrap(reply(msg).getBytes(charset)),client);
    38             } catch (IOException e) {
    39                 e.printStackTrace();
    40             }
    41         }
    42     }
    43     private String reply(String word){
    44         return "you said :"+word;
    45     }
    46     public static void main(String[] args) throws IOException {
    47             new UDPChatServer().service();
    48     }
    49 }

    客户端代码:

     1 public class UDPChatClient {
     2     private Integer port=8000;
     3     private String host="localhost";
     4     //UDP socket
     5     private DatagramSocket socket;
     6     private InetAddress address;
     7     private Charset charset=Charset.forName("UTF-8");
     8     
     9     public UDPChatClient() throws IOException {
    10         socket=new DatagramSocket();
    11         //设置服务器的地址
    12         address=InetAddress.getByName(host);
    13         System.out.println("connection ok");
    14     }
    15     public static void main(String[] args) throws IOException {
    16         new UDPChatClient().say();
    17     }
    18     private void say() throws IOException {
    19         BufferedReader localreader=new BufferedReader(new InputStreamReader(System.in));
    20 
    21         String word;
    22         while ((word=localreader.readLine())!=null){
    23             // 将string转为byte数组 发送udp包
    24             byte[] data=word.getBytes(charset);
    25             //组装包指定ip和端口的数据包
    26             DatagramPacket outputPacket=new DatagramPacket(data,data.length,address,port);
    27             //发送
    28             socket.send(outputPacket);
    29             //接收udp包放到byte数组中
    30             DatagramPacket inputPacket=new DatagramPacket(new byte[1024],1024);
    31             socket.receive(inputPacket);
    32             //打印获取的数据
    33             System.out.println(new String(inputPacket.getData(),0,inputPacket.getLength(),charset));
    34             
    35             //客户端主动关闭
    36             if (word.equals("bye")){
    37                 socket.close();
    38                 break;
    39             }
    40             
    41         }
    42     }
    43 }
  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/6681392.html
Copyright © 2011-2022 走看看