java - UDP套接字处理

标签 java sockets processing

我在 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/

相关文章:

java - 有没有办法让 11x11 网格中的 JTextField 具有背景对象,例如圆形或正方形?

java - 运行 Android Studio 时遇到问题

javascript - 如何在processing.js函数外部访问processing.js 'width'和 'height'

java - 加工中的打地鼠

java - 在处理中实例化变量异常

java - java中使用线性同余方程的实现

java - Android数据库md5改变,为什么改变相同的大小?

c++ - 当您在客户端禁用网络连接时,CSocket 不接收 OnClose 或 OnReceive

linux - 当目标 IP 不是分配给接口(interface)的 IP 时,在 TUN/TAP 接口(interface)上接收 IP 数据包

c++ - Winsock MSG_DONTWAIT 等效项