Java中的服务器没有看到广播udp数据包

2024-10-01 19:15:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目由一个用java编写的服务器和一个用python编写并运行在raspberry上的客户机组成

我试图用raspberry pi发送一个广播UDP消息,以便在我的网络中找到服务器(它的IP地址会一次又一次地改变,所以我无法在默认情况下设置它),这样只有服务器会响应我的请求,我才能得到它的IP

我的客户端代码非常简单:

import socket
import ssl
PORT=4435
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto("SERVER?", ("<broadcast>", PORT))
print(sock.recv(4096))
sock.close()

它只需打开一个套接字,并在广播中发送消息“socket?”

服务器太简单了。 “服务器”类:

public class Server extends Thread {

private ServerSocket server;

public ServerBroadcast() {
    try{  
       this.server= new ServerSocket(4435);
       System.out.println("Server is active");
       this.start();
    } catch (Exception e) {
        System.out.println(e);
    }
}

public void run() {
    try {
        System.out.println("Broadcast server is active!");
        while (true) {
            Socket richiestaClient = this.serverSocket.accept();
            System.out.println("received");
            new GestioneRichiesteBroadcast(richiestaClient);
        }
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }
}

“GestioneRichiesteBroadcast”类: 公共类GestioneRichiesteBroadcast{

private Socket connessione;
private Scanner input;
private PrintStream output;
private Date data;
private DateFormat formatoData;

public GestioneRichiesteBroadcast(Socket client) {
    try {
        this.connessione = client;
        this.input = new Scanner(client.getInputStream());
        this.output = new PrintStream(client.getOutputStream());
        this.data = new Date();
        this.formatoData = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
        this.gestioneRichiesta();
    } catch (IOException e) {
        System.out.println(e);
    }
}

public void gestioneRichiesta() {
    String messaggio = this.input.nextLine();
    if (messaggio.contentEquals("SERVER?")) {
        this.output.println("YES,"+this.formatoData.format(this.data));
    }
}
}

我的服务器没有看到客户端发送的消息,但Wireshark捕获并正确显示它们。我怎么了

Wireshark screenshot


Tags: 服务器client消息newserversocketprivatepublic

热门问题