题目:完成网站的咨询聊天(UDP)

题目:完成网站的咨询聊天(UDP)

学生端:

package com.gao.Project.Pro6;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class TestSend {//发送方:

    public static void main(String[] args){
        System.out.println("学生上线");
        //1.准备套接字:指定发送方的端口号
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(8888);
           while (true){
               //2.准备数据包
               Scanner sc = new Scanner(System.in);
               System.out.print("学生:");
               String str = sc.next();

               byte[] bytes = str.getBytes();
        /*
        需要四个参数:
        1.指的是传递数据转为字节数组
        2.字节数组的长度
        3.封装接收方的ip
        4.指定接收方的端口号
         */
               DatagramPacket dp = new DatagramPacket(bytes,bytes.length,InetAddress.getByName("localhost"),9999);
               //发送:
               ds.send(dp);
               if(str.equals("再见")){
                   System.out.println("学生下线了");
                   break;
               }

               //接收老师发回来的信息
               byte[] b = new byte[1024];
               DatagramPacket dp2 = new DatagramPacket(b,b.length);
               //接收对方的数据包,然后放入我们的dp数据包中填充
               ds.receive(dp2);//接收完以后dp里面就填充好内容了

               //4.取出数据:
               byte[] data = dp2.getData();
               String s = new String(data,0, dp2.getLength());//dp.getLength()数组包中的有效长度
               System.out.println("老师对我说:"+s);
           }


        } catch (SocketException e) {
           e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            ds.close();
        }



    }
}

教师端:

package com.gao.Project.Pro6;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class TestReceive {//接收方

    public static void main(String[] args){
        System.out.println("老师上线了");
        //1.创建套接字:指定接收方的端口
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(9999);
          while (true){
              //2.有一个空的数据包,打算用来接收   对方传过来的数据包:
              byte[] b = new byte[1024];
              DatagramPacket dp = new DatagramPacket(b,b.length);
              //接收对方的数据包,然后放入我们的dp数据包中填充
              ds.receive(dp);//接收完以后dp里面就填充好内容了

              //4.取出数据:
              byte[] data = dp.getData();
              String s = new String(data,0, dp.getLength());//dp.getLength()数组包中的有效长度
              System.out.println("学生对我说:"+s);
              if(s.equals("再见")){
                  System.out.println("学生下线了,老师也下线了");
                  break;
              }

              //老师进行回复:
              Scanner sc = new Scanner(System.in);
              System.out.print("老师:");
              String str = sc.next();
              byte[] bytes = str.getBytes();
              //封装数据,并且指定学生的ip和端口号
              DatagramPacket dp2 = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("localhost"),8888);
              //发送:
              ds.send(dp2);

          }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //5.关闭资源:
            ds.close();
        }
    }
}

posted @   进步+吃饭  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示