2009-05-12 7 views
2

私は基本的なサーバークライアントJavaアプリケーションを作成しようとしています。しかし、私はいつも "私は使用しているポートに関係なく、ポート13244のソケットバインドが失敗しました:アドレスは既に使用中(errno = 98)"というエラーメッセージを受け取りました。Javaソケットプログラミング - アドレスは既に使用中です(errno = 98)

私は自分のアプリケーションのソースコードを添付しています。私が作っているばかげた間違いがあるのでしょうか?

多くのありがとうございます!

乾杯、 J

/** 
* 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."); 
    } 
} 

答えて

13

あなたが二回start()を行います。同じポートで待機する2つのサーバーを開始することはできません。

+0

私はあなたを単なる秒で打ち負かすと思います。 +1。 –

9

test.start()を2回呼び出すと、最初のソケットがソケットをつかんでいるため、2回目は失敗します。

+0

確かに、数秒で... +1でも;-) – cadrian

関連する問題