zoukankan      html  css  js  c++  java
  • Java网络编程--UDP、TCP协议实现简单接收和发送数据

    一、UDP协议

    (一)服务器端:

    步骤如下:

    • 1、创建接收端Socket对象

    • 2、创建一个接收数据包

    • 3、调用socket对象的接收数据方法

    • 4、解析数据包,并将其输出在控制台

    • 5、释放资源

      代码实现如下:

      public class ReceiveDemo {
      	public static void main(String[] args) throws IOException {
      		//创建接收端socket对象
      		DatagramSocket ds = new DatagramSocket(12345);
      		
      		//创建接收数据包
      		byte[] buf = new byte[1024];
      		DatagramPacket dp = new DatagramPacket(buf, buf.length);
      		
      		//接收数据
      		ds.receive(dp);
      		
      		//解析数据包
      		String ip = dp.getAddress().getHostName();
      		String datas = new String(dp.getData(), 0, dp.getLength());
      		System.out.println("接收到来自 "+ip+" 的数据:"+datas);
      		
      		//释放资源
      		ds.close();
      	}
      }
      

    (二)客户端:

    步骤如下:

    • 1、创建发送端Socket对象

    • 2、创建数据,并把数据打包

    • 3、调用socket对象的发送方法来发送数据包

    • 4、释放资源

      代码实现如下:

      public class SendDemo {
      	public static void main(String[] args) throws IOException {
      		//创建发送端socket对象
      		DatagramSocket ds = new DatagramSocket();
      		
      		//创建需要发送的数据,并封装成数据包
      		byte[] datas = "Hello UDP".getBytes();
      		DatagramPacket dp = new DatagramPacket(datas, datas.length, netAddress.getByName("127.0.0.1"), 12345);
      		
      		//发送
      		ds.send(dp);
      		
      		//释放资源
      		ds.close();
      	}
      }
      

      服务器端收到数据如下:

    二、TCP协议

    (一)服务器端:

    步骤如下:

    • 1、创建服务器端socket对象(ServerSocket类)

    • 2、监听客户端连接。并且针对每一个客户端都返回一个socket对象(Socket类的实例)

    • 3、获取输入流,读取数据

    • 4、释放资源

      代码实现如下:

    public class ServerDemo {
    	public static void main(String[] args) throws IOException{
    		//创建ServerSocket对象
    		ServerSocket ss = new ServerSocket(12345);
    		
    		//监听客户端连接。返回客户端socket对象
    		Socket s = ss.accept();
    		
    		//获取输入流,读取数据
    		InputStream is = s.getInputStream();
    		byte[] datas = new byte[1024];
    		int len = is.read(datas);
    		System.out.println("Server:"+new String(datas, 0, len));
    		
    		//获取输出流,写出反馈
    		OutputStream os = s.getOutputStream();
    		os.write("数据已收到".getBytes());
    		
    		//释放资源
    		s.close();
    	}
    }
    

    (二)客户端:

    步骤如下:

    • 1、创建发送端socket对象(这一步如果成功,表明连接已经建立成功)
    • 2、获取输出流,发送数据
    • 3、释放资源
    public class ClientDemo {
    	public static void main(String[] args) throws IOException {
    		//创建socket对象
    		Socket s = new Socket("127.0.0.1", 12345);
    		
    		//获取输出流
    		OutputStream os = s.getOutputStream();
    		os.write("Hello TCP".getBytes());
    		
    		//获取输入流
    		InputStream is = s.getInputStream();
    		byte[] datas = new byte[1024];
    		int len = is.read(datas);
    		System.out.println("Client:"+new String(datas, 0, len));
    		
    		//释放资源
    		s.close();
    	}
    }
    

    运行结果如下:

    服务器端收到消息:

    客户端收到反馈:

    Java新手,若有错误,欢迎指正!

  • 相关阅读:
    Java高并发24-使用自定义锁生成一个消费模型
    Java高并发连载23-基于AQS实现自定义同步器
    JavaScript连载38-编写评论界面
    Java高并发22-AQS条件变量的支持
    Java高并发21-AQS在共享,独占场景下的源码介绍
    SSH 集成Shiro和EhCache,设置登录超时时间无效解决办法。
    Vue3.0 + Echarts 实现地区人口数量分布展示
    从零开始学VUE之网络模块(Axios)
    从零开始学VUE之VueX(modules)
    从零开始学VUE之VueX(actions)
  • 原文地址:https://www.cnblogs.com/Java-biao/p/12589106.html
Copyright © 2011-2022 走看看