我的项目由一个用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捕获并正确显示它们。我怎么了
目前没有回答
相关问题 更多 >
编程相关推荐