UDP Socket聊天室(Java)

UDP聊天室:循环的发送字

通过while循环,文字一直可以发送

dp.getData()是获取 **DatagramPacket**中存储的数据的字节数组。

发送端:
java 复制代码
package TseUDP;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;

public class LoginCelint {
    //客户端
    public static void main(String[] args) {
        System.out.println("我是客户端---------------");
        //发送信息
        Scanner scanner = new Scanner(System.in);
        DatagramPacket dp = null;
        DatagramSocket ds = null;

        try {

            while (true){
                System.out.print("客户端请输入:");
                String msg = scanner.nextLine();
                dp = new DatagramPacket(msg.getBytes(),
                        msg.getBytes().length,
                        InetAddress.getByName("127.0.0.1"),
                        8888);

                ds = new DatagramSocket();
                ds.send(dp);

                //接收
                byte b[] = new byte[100];
                dp = new DatagramPacket(b,b.length);
                ds.receive(dp);
                String content = new String(dp.getData());
                System.out.println("服务器说"+content);


            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            ds.close();

        }
    }
}
接收端:
java 复制代码
package TseUDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.util.Scanner;

public class LoginServer {
    //服务器
    public static void main(String[] args) {
        System.out.println("我是服务端------------------------------");
        Scanner scanner = new Scanner(System.in);
        DatagramPacket dp = null;
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(8888);

            while (true) {

                byte b[] = new byte[100];
                dp = new DatagramPacket(b, b.length);

                //等待接收
                ds.receive(dp);
                //拆包
                String msg = new String(dp.getData());
                System.out.println("客户端对我说:" + msg);

                //发送
                System.out.print("服务器请输入:");

                String content = scanner.next();
                //发送地址:获得上个数据包的发送地址
                SocketAddress sa = dp.getSocketAddress();
                dp = new DatagramPacket(content.getBytes(),
                        content.getBytes().length,
                        sa);
                ds.send(dp);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            ds.close();
        }
    }
}
相关推荐
人活一口气20 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP1 天前
Vibe Coding -- 完整项目案例实操
java
荣码1 天前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing1 天前
Google第三方授权登录
java·后端·程序员
明月光8181 天前
从一行 @Builder 说起:重新拾起 Java 的 Lombok、注解与 Builder 模式
java
考虑考虑1 天前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯1 天前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路1 天前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
像我这样帅的人丶你还2 天前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev2 天前
GreenDAO → Room
android·java·kotlin