【问题标题】:Sending and receiving socket messages in Java在 Java 中发送和接收套接字消息
【发布时间】:2014-04-10 09:44:39
【问题描述】:

我们正在为 Uni 做一个套接字编程项目。我们正在开发一个文件同步软件,但我们目前正忙于通过套接字发送和接收消息。

因此,在本地机器上进行测试时,代码可以完美运行。但是,当我们通过 LAN 和 WiFi 模拟服务器-客户端环境时,我们会得到空指针异常。这些文件是分块发送的,因此只有 5-10 个文件通过。

我猜想通过套接字发送消息所需的总时间存在一些问题,这就是我们得到异常的原因。

发送消息的方法发送消息并启动定时器线程。如果在 2 秒内没有收到来自服务器的答复,则会再次发送消息。下面是发送消息的代码:

public static void sendMessage(final byte[] message) {
  try {
    final Thread timer = new Thread() {                
      @Override
      public void run() {
        try {
          System.out.println("timer started");
          sleep(1500);
          System.out.println("timer timeout");
          sendMessage(message);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    };

    Thread thread = new Thread() {
      @Override
      public void run() {
        try {
          byte[] buffer = new byte[1250];
          serverByteStream.read(buffer);
          timer.stop();
        } catch (Exception e) {
        }
      }
    };

    timer.start();
    serverByteStream.write(message);
    thread.start();
  } catch (Exception e) {   
  }
}

【问题讨论】:

  • 请发布异常堆栈跟踪。
  • java.lang.NullPointerException at ServerThread.copyFile(ServerThread.java:372) at ServerThread.run(ServerNit.java:166) @GregorKoukkoullis 你想看看它所指的代码吗?
  • 整个堆栈跟踪。您从e.printStackTrace() 获得的输出。应该避免在线程上使用stop()方法,最好设置一个由线程的run方法检查的属性并中断线程。
  • 嗯,我想知道错误出现在您上面发布的代码中的位置;-)
  • NPE 只是编程错误。它们与网络、时间、套接字或休眠线程无关。堆栈跟踪中有足够的信息可以让您自己解决这个问题,而且作为专业程序员,您确实应该这样做。

标签: java sockets time nullpointerexception thread-sleep


【解决方案1】:

当你再次递归调用sendMessage() 时,你也应该杀死thread 线程。

请在出现错误的地方发布完整的堆栈跟踪和代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2010-11-14
    • 2015-05-12
    相关资源
    最近更新 更多