我在 Processing 中编写 UDP 套接字的服务器端,每次在行 DatagramPacket receivePacket = new DatagramPacket(receiveData, 4096);
上都会遇到 NullPointerException。客户端是一个 Python 文件。这是服务器的代码。 setup()
和 draw()
方法是通过不同的 Processing 文件调用的。
import processing.net.*;
import java.io.*;
import java.net.*;
import java.util.*;
//Server myServer;
DatagramSocket serverSocket;
byte[] receiveData;
InetAddress IPAddressList;
int portList = -1;
void setup(){
try{
DatagramSocket serverSocket = new DatagramSocket(21567);
}
catch (IOException e){
e.printStackTrace();
System.out.println(e);
}
byte[] receiveData = new byte[4096];
}
void draw(){
float P1,P2,P3;
print ("hello");
try{
DatagramPacket receivePacket = new DatagramPacket(receiveData, 4096);
serverSocket.receive(receivePacket);
String greeting = new String(receivePacket.getData());
System.out.println("From Client: " + greeting);
IPAddressList = receivePacket.getAddress();
portList= receivePacket.getPort();
P1 = Integer.valueOf(greeting);
print(P1);
print (greeting);
}
catch (IOException e){
System.out.println(e.getMessage());
}
for (int i=0;i<receiveData.length;i++){
print(receiveData[i]);
}
}
最佳答案
您指出 NullPointerException
的那一行非常有帮助。
问题是你初始化了一个局部变量 receiveData
而不是外部作用域中的field receiveData
.
解决方案是简单地将行 byte[] receiveData = new byte[4096];
替换为 receiveData = new byte[4096];
。
通常,这称为名称隐藏:
关于java - UDP套接字处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200032/