zoukankan      html  css  js  c++  java
  • 简单的UDP编程1

    服务端:

     1 package udp;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 import java.net.SocketException;
     7 
     8 //服务器
     9 public class AskServer {
    10     public static void main(String[] args) throws IOException {
    11         //1.创建一个DatagramSocket   用来发送或者接收数据的
    12         DatagramSocket socket  = new DatagramSocket(8888);//端口用来接收数据
    13         
    14         //2.使用DatagramSocket接收数据
    15         //接收数据 要使用 DatagramPacket
    16         byte [] buf = new byte [1024];//接收数据不需要知道对方IP
    17         DatagramPacket packet = new DatagramPacket(buf, buf.length);
    18         socket.receive(packet);
    19         //System.out.println(packet.getLength());//数据包的长度
    20         //System.out.println(packet.getData());//对方发送的数据
    21         //System.out.println(new String(packet.getData(),0,packet.getLength()));
    22         System.out.println("来自客户端的消息:"+new String(buf,0,packet.getLength()));
    23     /*    System.out.println(packet.getAddress());//对方的ip?
    24         System.out.println(packet.getPort());//对方的端口号*/    
    25         
    26         //3.向客户端发送数据
    27         String reply ="亲,在的";
    28         byte [] buf2 = reply.getBytes();
    29         //对方的IP可能随时变化   通过接收的数据包能够获取对方的ip和端口
    30         DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length, packet.getAddress(), packet.getPort());
    31         socket.send(packet2);
    32         
    33         //4.关闭
    34         socket.close();
    35     }
    36 }
    AskServer.java

    客户端:

     1 package udp;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 import java.net.InetAddress;
     7 import java.net.SocketException;
     8 import java.net.UnknownHostException;
     9 
    10 /**
    11  * @author superdrew
    12  *        功能:客户和咨询师在线交流
    13  *        使用udp完成
    14  *        注意:
    15  *        1.udp没有严格意义区分服务端和客户端,双方都是平等的(主动发送请求是客户端,被动接收请求的是服务端)
    16  *        2.udp编程和IO流没有关系
    17  *        3.udp两个核心类
    18  *            DatagramSocket:用来接收或者发送数据包
    19  *            DatagramPacket:数据包
    20  *        4.客户端不写 port 端口 会 自动生成一个端口
    21  *
    22  *        分解1:先完成一次单向通信
    23  *           2:一次双向通信
    24  *           3:多次双向通信
    25  *
    26  *        总结:1。DatagramSocket 
    27  *                用来接收和发送数据的
    28  *                socket.send(packet)
    29  *                socket.receive(packet2)
    30  *            2。DatagramPacket
    31  *                封装了数据,对方的IP,对方的接收端口
    32  *                getLength()   获取对方发送数据的长度
    33  *                getData()     获取对方发送的数据 (字节数组)
    34  *                getAddress()  获取对方的ip
    35  *                getPort()     获取对方的发送数据的端口
    36  *            
    37  */
    38 
    39 public class AskClient {
    40     public static void main(String[] args) throws IOException {
    41         //1.创建DatagramSocket 用来发送数据
    42         DatagramSocket socket = new DatagramSocket(9999);//发送端的端口
    43         
    44         //2.使用DatagramSocket发送数据
    45         //发送数据只前 要 创建  DatagramPacket 数据包
    46         String info = "亲,在吗?";
    47         byte [] buf = info.getBytes();
    48         DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),8888);
    49         socket.send(packet);
    50         
    51         byte [] buf2 = new byte [1024];
    52         DatagramPacket packet2 = new DatagramPacket(buf2,buf2.length);
    53         socket.receive(packet2);//接收的数据都放到packet2里面了  对方发送的数据封装到了buf2 用 packet2.getData 效果是一样的s
    54         String result = new String(buf2,0,buf2.length);
    55         System.out.println("来自服务器的消息:"+result);
    56         
    57         //3.关闭资源
    58         socket.close();
    59     }
    60 
    61 }
    AskClient.java

    操作步骤:

    ① 运行服务端;② 运行客户端;

    结果展示:

  • 相关阅读:
    centos下卸载rpm包
    centos下添加环境变量和启动apache
    centos(linux) 下如何查看端口占用情况及杀死进程
    如何使上层的div遮住的链接可以点击
    jquery.blockUI.2.31.js 弹出层项目介绍
    fieldset、legend、display html元素
    <a>标签中href="javascript:;"的意思
    memcache 学习笔记
    sublime text3 JS语法检测插件
    Apache Rewrite的主要功能
  • 原文地址:https://www.cnblogs.com/superdrew/p/8098684.html
Copyright © 2011-2022 走看看