1
我正在写处理中的UDP套接字的服务器端,并且每次在线DatagramPacket receivePacket = new DatagramPacket(receiveData, 4096);
上遇到NullPointerException异常。客户端是一个Python文件。这是服务器的代码。通过不同的处理文件调用方法setup()
和draw()
。UDP套接字处理
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'下一行现在.. .serverSocket.receive(receivePacket);' – dawnoflife
啊。与变量'serverSocket'相同的问题:不要在本地声明它。 – Nayuki
明确地重申一下,你所做的是在'try'模块中创建变量'serverSocket'和'receiveData',它们与**命名的变量'serverSocket'和'receiveData'有**不同**以上在外部范围内。这种效果被称为名字遮蔽。 – Nayuki