質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Q&A

解決済

2回答

906閲覧

javaにおけるSocket通信

NakaKou

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

0グッド

0クリップ

投稿2019/03/13 13:00

###現状
今、javaを用いたSocket通信を行っています。その際にはこのサイトを参考にしていました。
僕の目標としては簡単は文字列を送って、勉強になればいいなと思っています。

###わからないこと
先のサイトのサーバー側のプログラムに疑問があります。

java

1while (true) { 2 line = reader.readLine(); 3 if (line.equals("bye")) { 4 break; 5 } 6 try{ 7 num = Integer.parseInt(line); 8 if(num%2==0){ 9 writer.println("OK"); 10 }else{ 11 writer.println("NG"); 12 } 13 }catch(NumberFormatException e){ 14 writer.println("数値を入力して下さい"); 15 } 16}

上文の8行目にある「num%2==0」の時にOKになっています。
また「num%2!=0」の時はNGになっています。

「write.println()」で送信しているのは分かります。
でも、この分岐の味がいまいち分かりません。

このif文またそれを囲むtry文は必要なのでしょうか?
なんであるのかを教えてください。

お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

参考にされたサーバの仕様は

クライアント側で偶数の数値を入力するとサーバーからOKと返ってきます。
奇数の場合はNGと返ってきます。数値以外のときはメッセージを返します。

と定義されています.

num%2==0 は num が偶数の場合 true となり, 偶数でない(=奇数)場合 false となりますので, "OK"/"NG" のどちらを送信するかの判断に使用されているものと思います.
if 文を使わない書き方も出来ますが, 単純にしたのではないでしょうか.

try 文は NumberFormatException を受け取るために必要です.
これは, この例外の発生をもって "数値以外" の判断としているためです.

別の方法を用いて『line の中身が全て数字であることを確認し, 数字で無かったらメッセージを送信する』ことが出来れば(そしてその場合は parseInt を行わなければ), try 文は必要ありません.
ただし, 思いも因らない事象(主にバグ)で parseInt に数字以外が渡ってしまった場合もプログラムが落ちないようにする(そして原因を突き止め易くする)ため, つまり万が一に備えて try 文を書いておくことはあります.

投稿2019/03/13 17:47

編集2019/03/13 17:49
jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NakaKou

2019/03/13 22:02

あーーーー、 当たり前過ぎましたね。 くだらないことを聞いたようで、ごめんなさい。
guest

0

でも、この分岐の味がいまいち分かりません。

これは、「偶数ならOK」「奇数ならNG」と表示させるためのものです。その仕事自体が不要ならもちろん不要です。

それを囲むtry文

Integer.parseIntは数値への変換に失敗すればNumberFormatExceptionを投げてきます。放置すれば、変換失敗した場合に強制終了となります(NumberFormatExceptionは非検査例外なので、放置してもコンパイルは通ります)。

投稿2019/03/13 13:23

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NakaKou

2019/03/13 22:03

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問