Java套接字编程-地址已在使用中(errno=98)

Java套接字编程-地址已在使用中(errno=98),java,sockets,Java,Sockets,我正在尝试编写一个基本的服务器客户端java应用程序。然而,无论我使用的是哪个端口,我总是收到一条消息“端口13244的10套接字绑定失败:地址已在使用(errno=98)”错误 我附上了我的应用程序的源代码,只是想知道我是否犯了非常愚蠢的错误 非常感谢 干杯, J /** *命令过程测试。 */ 导入java.net。*; 导入java.io.*; 公共类CommandProcessTest实现可运行{ 专用静态最终int端口=13244; 私有服务器套接字服务器套接字; 公共静态void m

我正在尝试编写一个基本的服务器客户端java应用程序。然而,无论我使用的是哪个端口,我总是收到一条消息“端口13244的10套接字绑定失败:地址已在使用(errno=98)”错误

我附上了我的应用程序的源代码,只是想知道我是否犯了非常愚蠢的错误

非常感谢

干杯, J

/**
*命令过程测试。
*/
导入java.net。*;
导入java.io.*;
公共类CommandProcessTest实现可运行{
专用静态最终int端口=13244;
私有服务器套接字服务器套接字;
公共静态void main(字符串[]args){
CommandProcessTest测试=新建CommandProcessTest();
System.out.println(“启动服务器”);
test.start();
System.out.println(“服务器启动”);
//试一试{
//测试。等待(100);
//}catch(InterruptedException e){
//     }
//线程客户端=新线程(测试);
System.out.println(“服务器开始接收”);
test.start();
System.out.println(“服务器退出”);
}
私有void start(){
试一试{
serverSocket=新的serverSocket(端口);
}捕获(IOE异常){
System.out.println(“无法侦听端口:4444”);
系统退出(-1);
}
}
专用void服务器(){
套接字clientSocket=null;
试一试{
clientSocket=serverSocket.accept();
CommandProcess cp=新的CommandProcess(clientSocket);
int cmd=10;
字符串arg=“”;
cp.sendCommand(cmd);
arg=“你好”;
cp.sendCommand(cmd,arg.split(“”);
arg=“你好,世界”;
cp.sendCommand(cmd,arg.split(“”);
arg=“世界你好世界”;
cp.sendCommand(cmd,arg.split(“”);
}捕获(IOE异常){
System.out.println(“接受失败:4444”);
系统退出(-1);
}
}
私有void客户端(){
试一试{
套接字=新套接字(“本地主机”,端口);
CommandProcess cp=新的CommandProcess(套接字);
while(true){
int cmd=cp.getCommand();
字符串[]args=cp.getArguments();
String s=“Command:”+Integer.toString(cmd);
如果(args!=null){
对于(int i=0;i
您执行了两次
start()。您无法启动两台服务器在同一端口上侦听。

您调用test.start()两次,第二次将失败,因为第一次占用了套接字。

我想您只需几秒钟就可以打败我+1.事实上,只要几秒钟+1也是;-)
/**
 * Command process test.
 */

import java.net.*;
import java.io.*;

public class CommandProcessTest implements Runnable{
  private static final int PORT = 13244;
  private ServerSocket serverSocket;

  public static void main(String[] args) {
    CommandProcessTest test = new CommandProcessTest();

    System.out.println("starting server.");
    test.start();
    System.out.println("server start up.");

//     try {
//       test.wait(100);
//     } catch(InterruptedException e) {
//     }


//     Thread client = new Thread(test);

    System.out.println("Server start receiving.");
    test.start();
    System.out.println("Server exit.");
  }

  private void start() {
    try {
      serverSocket = new ServerSocket(PORT);
    } catch (IOException e) {
      System.out.println("Could not listen on port: 4444");
      System.exit(-1);
    }
  }

  private void server() {
    Socket clientSocket = null;

    try {
      clientSocket = serverSocket.accept();
      CommandProcess cp = new CommandProcess(clientSocket);

      int cmd = 10;
      String arg = "";
      cp.sendCommand(cmd);

      arg = "hello";
      cp.sendCommand(cmd, arg.split(" "));

      arg = "hello world";
      cp.sendCommand(cmd, arg.split(" "));

      arg = "world hello world";
      cp.sendCommand(cmd, arg.split(" "));

    } catch (IOException e) {
      System.out.println("Accept failed: 4444");
      System.exit(-1);
    }
  }

  private void client() {
    try {
      Socket socket = new Socket("localhost", PORT);
      CommandProcess cp = new CommandProcess(socket);

      while(true) {
        int cmd = cp.getCommand();
        String[] args = cp.getArguments();

        String s = "Command: " + Integer.toString(cmd);
        if(args != null) {
          for(int i = 0; i < args.length; i++) {
            if(args[i] == null) {
              break;
            }
            s += args[i];
          }
        }

        System.out.println(s);
      }

    } catch(IOException e) {
      System.out.println("Would not connect to local host: 444");
      System.exit(-1);
    }
  }

  public void run() {
    System.out.println("Starting client");
    client();
    System.out.println("Client startup.");
  }
}