2017-04-10 14 views
0

私はお互いに通信する必要のあるプログラムとワードサーバーを持っています。私はこれをうまくやって、サーバーに情報を送り、もう一度それを受け取ることができます。 私は、次のコードを持っている:文字列を分割するときに無効なポート番号 - Javaソケット

try{ 
    Socket sock=new Socket(InetAddress.getByName(null), 12837); 
    InputStream s=sock.getInputStream(); 
    PrintStream out = new PrintStream(sock.getOutputStream()); 
    BufferedReader r= new BufferedReader(new InputStreamReader(s)); 
    String line = r.readLine(); 
    String[] code = line.split("+"); 
    while (line != null) { 
    System.out.println ("received: " + line); 

    // System.out is to the console. 
    // out.println is to the server 
    out.println("161*"); 
    line = r.readLine(); 
    } 
} catch (UnknownHostException e) { 
    System.out.println("Unknown host. Check the hostname or ip address of the server"); 
} catch (ConnectException e) { 
    System.out.println("Problems connecting to server. Is it running?"); 
} catch (NumberFormatException e) { 
    System.out.println("Port number should be an integer"); 
} catch (IllegalArgumentException e) { 
    System.out.println("The port number needs to be less than 65536"); 
} catch (Throwable ex){System.out.println ("Exception: " + ex.toString()); 
    } 

アイデアは、私は言葉サーバを起動することで、自分のアプリケーションを実行し、それがその後、<code>は6つのランダムな文字と数字でメッセージ"<bonjour+[code]>"を受信します。私が必要とするのは、サーバーに私のユーザーIDである161*<code>をエコーバックすることです。

たとえば、サーバーには"<bonjour+wj1234>"と表示され、"161*wj1234"をエコーバックする必要があります。

私は最も簡単な方法は、+でサーバーから行を分割するだろう考え出し(私も>を削除する必要があります)が、それを実行しているとき、私は次のエラーを取得する:

ポート番号を65536未満にする必要があります。

分割された文字列で何もしていない場合でも、これは実行されます。文字列自体を分割する行為は、何らかの理由でポート番号を変更することになります。ポート番号は手動で12837に設定され、変更されません。

+0

「IllegalArgumentException'をキャッチして、ポート番号に関するエラーメッセージを表示しています。その '' IllegalArgumentException''がどこから来たのか確認してください。 '' System.out.println'の前に '' e.printStackTrace() ''を置いてみてください。 – f1sh

+0

コードのどこかにIlegalArgumentExceptionがスローされ、キャッチがポートについてその部分を表示しますが、実際には変更されませんでした。 –

+0

http://stackoverflow.com/questions/2198373/java-how-to-split-a-string-on-plus-signs – Reimeus

答えて

1

IllegalArgumentExceptionこの線によって引き起こされている:+は特殊記号(「1つ以上」数量詞)であるため

String[] code = line.split("+"); 

、違法な正規表現を指定します。リテラルJava文字列にバックスラッシュが(それ自体がエスケープされ2つのバックスラッシュとして符号化されていることを

String[] code = line.split("\\+"); 

注:

あなたがリテラルプラス記号を指定するには、バックスラッシュで+記号をエスケープする必要があります)。

関連する問題