ServerSocket.accept方法

时间:2015-10-13 12:46:41

标签: java sockets

我创建了类SocketListener以通过TCP协议接收数据。我的开始方法如下:

public void start() throws IOException {
LOGGER.log(Level.INFO, "SOCKET LISTENER STARTED PORT: " + port);
serverSocket = new ServerSocket(port);
while (true) {
  FrameParser fp;
  try {
    socket = serverSocket.accept(); 
    fp = new FrameParser(socket);
    Thread thread = new Thread(fp);
    thread.start();
  } catch (Exception e) {
    resetConnection();
  }
}

}

编写此代码我基于oracle网站(http://www.oracle.com/technetwork/java/socket-140484.html#server)的示例。当我在serverSocket.accept()内部放置一行时,ServerSocket没有收到一些数据包。我确信这个TCP数据包是在我的网络接口上收到的,因为我稍后使用Wireshark检查了它。我不知道是什么导致了这个问题所以我尝试了不同的东西,我注意到当我改变我的代码时收到了更多的数据包:

public void start() throws IOException {
LOGGER.log(Level.INFO, "SOCKET LISTENER STARTED PORT: " + port);
serverSocket = new ServerSocket(port);
socket = serverSocket.accept();
while (true) {
  FrameParser fp;
  try {
    fp = new FrameParser(socket);
    Thread thread = new Thread(fp);
    thread.start();
  } catch (Exception e) {
    resetConnection();
  }
}

}

我使用试错法进行了此修改,不幸的是,在此更改之后,我的应用程序开始接收的数据比我在Wireshark中过滤的数据要多(例如在Wireshark中我看到了10个数据包,但我的应用程序创建了数百个新线程,但它完成了内存错误)。

在第一种情况下,并非所有TCP数据包都到达套接字的原因是什么?

0 个答案:

没有答案
相关问题