随笔 - 53  文章 - 0  评论 - 0  阅读 - 4197

网络编程—UDP与URL

网络编程—UDP
发消息:不用连接;需要知道对方的地址!

发送消息
客户端

package com.deng.lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

//不需要连接服务器
public class UdpClientDemo01 {
   public static void main(String[] args) throws Exception{
       //1.建立一个Socket
       DatagramSocket socket = new DatagramSocket();
       //2.建个包
       String msg = "你好,欢迎光临";
       //发送给谁
       InetAddress localhost = InetAddress.getByName("localhost");
       int port = 9090;
       //数据 数据的长度起始 要发送给谁
       DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length,localhost,port);
       //3.发送包
       socket.send(packet);
       //4.关闭流
       socket.close();
  }
}

服务端

package com.deng.lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpServerDemo01 {
   public static void main(String[] args) throws Exception{
       //开放端口
       DatagramSocket socket= new DatagramSocket(9090);
       //接受数据包
       byte[] buffer = new byte[1024];
       DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);

       socket.receive(packet);//阻塞接受

       System.out.println(packet.getAddress().getHostAddress());
       System.out.println(new String(packet.getData(),0,packet.getLength()));
       //关闭连接
       socket.close();
  }
}

咨询
循环发送消息
package com.deng.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

//发送方
public class UdpSenderDemo01 {
   public static void main(String[] args) throws Exception{
       DatagramSocket socket = new DatagramSocket(8888);

       //准备数据 控制台System.in
       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       while (true){
           String data = reader.readLine();
           byte[] datas = data.getBytes();
           DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
           socket.send(packet);
           if (data.equals("bye")){
               break;
          }
      }
       socket.close();
  }
}
循环接收消息
package com.deng.chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

//接收方
public class UdpReceiveDemo01 {
   public static void main(String[] args) throws  Exception{
       DatagramSocket socket = new DatagramSocket(6666);
       while (true){
        //准备接受包裹
      byte[] container = new byte[1024];
      DatagramPacket packet = new DatagramPacket(container, 0, container.length);
      socket.receive(packet);//阻塞式接受包裹

      //断开连接 bye
      byte[] data = packet.getData();
      String receiveData = new String(data, 0, data.length);
      System.out.println(receiveData);
      if (receiveData.equals("bye")){
          break;
        }
      }
      socket.close();
  }
}

在线咨询: 两个人都可以是发送方 都可以是接收方
建一个TalkReceive

package com.deng.chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable{

   DatagramSocket socket = null;
   private int port;
   private String msgFrom;

   public TalkReceive(int port,String msgFrom) {
       this.port = port;
       this.msgFrom =msgFrom;
       try {
           socket = new DatagramSocket(port);
      } catch (SocketException e) {
           e.printStackTrace();
      }
  }

   @Override
   public void run() {
       while (true){
           try {
               //准备接受包裹
               byte[] container = new byte[1024];
               DatagramPacket packet = new DatagramPacket(container, 0, container.length);
               socket.receive(packet);//阻塞式接受包裹

               //断开连接 bye
               byte[] data = packet.getData();
               String receiveData = new String(data, 0, data.length);

               System.out.println(msgFrom +":"+receiveData);

               if (receiveData.equals("bye")){
                   break;
              }
          } catch (IOException e) {
               e.printStackTrace();
          }
      }
       socket.close();
  }

}

建一个TalkSend

package com.deng.chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TalkSend implements Runnable{
   DatagramSocket socket = null;
   BufferedReader reader = null;

   private int fromPort;
   private String toIP;
   private int toPort;
   public TalkSend(int fromPor,String toIP,int toPort) {
       this.fromPort = fromPort;
       this.toIP = toIP;
       this.toPort = toPort;

       try {
           socket = new DatagramSocket(fromPort);
           reader = new BufferedReader(new InputStreamReader(System.in));
      } catch (SocketException e) {
           e.printStackTrace();
      }
  }


   @Override
   public void run() {
       try {
           while (true){
               String data = reader.readLine();
               byte[] datas = data.getBytes();
               DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
               socket.send(packet);
               if (data.equals("bye")){
                   break;
              }
          }
      } catch (IOException e) {
           e.printStackTrace();
      }
       socket.close();
  }
}
建一个TalkSend

package com.deng.chat;

public class TalkSend {
   public static void main(String[] args) {
       //开启两个线程
       new Thread(new TalkSend(7777,"localhost",9999)).start();
       new Thread(new TalkReceive(8888,"老师")).start();
  }
}

建一个TalkTeacher

package com.deng.chat;

public class TalkTeacher {
   public static void main(String[] args) {
       new Thread(new TalkSend(5555,"localhost",8888)).start();
       new Thread(new TalkReceive(9999,"学生")).start();
  }
}

URL
统一资源定位符:定位资源的,定位互联网上的某一个资源

DNS 域名解析 xxx.x..x..x

1.协议: //ip地址:端口/项目名/资源
例题:下载网络资源

package com.deng.lesson04;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

//下载网络资源
public class urlDown {

   public static void main(String[] args) throws Exception{
       //1.下载地址
       URL url = new URL("https://s4.music.126.net/style/web2/img/default/default_avatar_40.jpg");
       //2.连接到这个资源 HTTP
       HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

       InputStream inputStream = urlConnection.getInputStream();
       FileOutputStream fos = new FileOutputStream("40.jpg");

       byte[] buffer = new byte[1024];
       int len;
       while ((len=inputStream.read(buffer))!=-1){
           fos.write(buffer,0,len);//写出数据
      }
       fos.close();
       inputStream.close();
       urlConnection.disconnect();//断开连接
  }
}

posted on   松下的蘑菇  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示