Java 为什么我的服务器套接字没有接收客户端发送的数据包

Java 为什么我的服务器套接字没有接收客户端发送的数据包,java,sockets,networking,udp,packet,Java,Sockets,Networking,Udp,Packet,我想创建一个数据报服务器/客户端程序,其中服务器从数组中选择一个随机字符串并将其发送给客户端。但当我运行服务器,然后运行客户端时,它会发送有关buf字节数组的数据。据我所知,客户端将数据发送到服务器,但服务器没有接收到数据 以下是客户端代码: import java.io.*; 导入java.net。*; 导入java.util.*; 公共类SDClient{ 受保护的静态字符串标签文本; 公共静态void main(字符串[]args)引发IOException{ //套接字设置 Multic

我想创建一个数据报服务器/客户端程序,其中服务器从数组中选择一个随机字符串并将其发送给客户端。但当我运行服务器,然后运行客户端时,它会发送有关buf字节数组的数据。据我所知,客户端将数据发送到服务器,但服务器没有接收到数据

以下是客户端代码:

import java.io.*;
导入java.net。*;
导入java.util.*;
公共类SDClient{
受保护的静态字符串标签文本;
公共静态void main(字符串[]args)引发IOException{
//套接字设置
MulticastSocket=新的MulticastSocket(1);
System.out.println(“插座打开”);
InetAddress组=InetAddress.getByName(“230.0.0.0”);
插座组(组);
System.out.println(“套接字连接组”);
//数据包设置
数据包;
字节[]buf=新字节[256];
//发送数据包
数据包=新数据包(基本单位,基本单位长度);
数据包设置地址(组);
数据包设置端口(2);
socket.send(包);
System.out.println(“数据包发送到:”);
System.out.println(“端口:“+packet.getPort()+”地址:“+packet.getAddress()”);
//接收数据包
数据包=新数据包(基本单位,基本单位长度);
套接字接收(数据包);
System.out.println(“收到的数据包”);
//显示数据包字符串
labelText=新字符串(packet.getData(),0,packet.getLength());
System.out.println(“标签文本:“+labelText”);
插座组(对照组);
socket.close();
}
}
以下是服务器代码:

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

public class SDServerThread extends Thread {

    protected DatagramSocket socket = null;
    protected String[] labelText = {"Packet sent and received", "Hello World!", "It works."}; 

    public SDServerThread() throws IOException {
        this("SDServerThread");
    }

    public SDServerThread(String name) throws IOException {
        super(name);
        socket = new DatagramSocket(2);
        System.out.println("socket opened");

    }

    public void run() {
        try {
            byte[] buf = new byte[256];
            DatagramPacket packet = null;

            packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
            System.out.println("packet received");

            String getText = getText();
            buf = getText.getBytes();

            InetAddress group = InetAddress.getByName("230.0.0.0");
            packet = new DatagramPacket(buf, buf.length, group, 1);
            socket.send(packet);
            System.out.println("packet sent");

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private String getText() {
        int textNr = (int)(Math.random() * 3);
        String returnT = labelText[textNr];

        return returnT;
    }



}

感谢您的建议

我将服务器DatagramSocket设置为多播套接字,然后将其加入到客户端所在的组中,从而修复了此问题

公共类SDServerThread扩展线程{
受保护的多播套接字=空;
...
套接字=新的多播套接字(2);
...
插座组(组);
}

我将服务器DatagramSocket设置为多播套接字,然后将其加入到客户端所在的组中,从而修复了该问题

公共类SDServerThread扩展线程{
受保护的多播套接字=空;
...
套接字=新的多播套接字(2);
...
插座组(组);
}