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

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

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

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

ソケット

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

1回答

1701閲覧

java:ユーザ入力をサーバに送るクライアント

ajima

総合スコア4

Java

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

ソケット

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2020/05/25 07:48

編集2020/05/29 17:41

前提・実現したいこと

javaでユーザ入力をサーバに送るクライアントのプログラムを教えてください。クライアントのウィンドウから打ち込んだ文字がサーバに送られて、同じ文字列が送り返されるプログラムを作りたいです。
実行例:
クライアントウィンドウ

java RunTransTextClient localhost 8100 hello hello

サーバーウィンドウ

java RunEchoServer 8100 accept: localhost read: hello wrote: hello done

発生している問題・エラーメッセージ

クライアント側の斜線部に入れるプログラムがわかりません。接続まではできているのですが、文字入力するとサーバー側ウィンドウに何も表示されません。

<現在のクライアントウィンドウ>

java RunTransTextClient localhost 8100 hello

<現在のサーバーウィンドウ>

java RunEchoServer 8100 accept: localhost

実行プログラム

<クライアント側のプログラム>

import java.net.*; import java.io.*; import java.util.*; public class TransTextClient{ boolean isOK = false; String host; Socket sock; public TransTextClient(String host, int port){ try{ this.host = host; sock = new Socket(host,port); isOK = true; } catch (UnknownHostException e){ System.err.println("unknown host : " + host); } catch (NoRouteToHostException e) { System.err.println("unreachable : " + host); } catch (ConnectException e) { System.err.println("connect refused : " + host); } catch (java.io.IOException e) { e.printStackTrace(); } } public void run() { if (! isOK) System.exit(1); try{ BufferedReader is; is = new BufferedReader( new InputStreamReader(sock.getInputStream())); PrintWriter os; os = new PrintWriter(sock.getOutputStream()); Scanner sc = new Scanner(System.in); String s; while (sc.hasNextLine()){ //標準入力から1行読み込む //改行コードを加えてサーバーに送り出す //サーバーから1行読み込む //標準出力に書く } sock.close(); } catch (java.io.IOException e) { e.printStackTrace(); } } }
public class RunTransTextClient { public static void main(String[] args) { String host = "localhost"; int port = 8888; if (args.length > 0) host = args[0]; if (args.length > 1) port = Integer.parseInt(args[1]); TransTextClient cli = new TransTextClient(host,port); cli.run(); } }

<サーバー側>

import java.net.*; import java.io.*; public class EchoServer{ ServerSocket servSock; public EchoServer (int port) { try { servSock = new ServerSocket(port);// 接続を受け付けるソケット } catch (IOException e) { e.printStackTrace();//エラーが起きたら停止する。 System.exit(1); } } public void run() { Socket sock = null; BufferedReader is = null; PrintWriter os = null; while (true) { try { sock = servSock.accept();//新しい接続を受け付けたら System.out.println("accept: "+sock.getInetAddress().getHostName()); is = new BufferedReader (new InputStreamReader(sock.getInputStream ())); os = new PrintWriter(sock.getOutputStream()); String s = null; while ((s= is.readLine())!=null){ //クライアントから読んで System.out.println("read: "+s); os.print(s+"¥r¥n");//そのままクライアントに送り返す os.flush();//確実に送り出す System.out.println("wrote:"+s); } System.out.println("done"); }catch (IOException e) { e.printStackTrace(); // System.exit(1); }finally { try{ if (is != null) is.close(); if (os != null) os.close(); if (sock != null) sock.close(); } catch (IOException e){ System.err.println(" Io Error in close"); } } } } }
public class RunEchoServer { public static void main(String[] args) { int port=8888; if (args.length >0) port = Integer.parseInt(args[0]); EchoServer serv = new EchoServer (port); serv.run(); } }

試したこと

問題である斜線部に以下のようなコードを入れた。

s = is.readLine(); System.out.println("read:"+s); os.print(s+"\r\n"); os.flush(); System.out.println("wrote:"+s);

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

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

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

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

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

javahack

2020/05/25 16:09

読みずらいので質問文を修正してコードをコードブロックで囲んでください。 またどのような文字を入力してエラーになったかも追記してください。
guest

回答1

0

とりあえず

Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at TransTextClient.run(TransTextClient.java:34) at RunTransTextClient.main(RunTransTextClient.java:8)

から導き出される答えは 「数値を期待」したが「数値ではなかった」

投稿2020/05/27 08:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問