ChatGPTでJavaのEcho Server書かせてみた

投稿日:

更新日:

カテゴリ:

最近話題になった超便利なAI ChatGPTの噂を聞きつけて、どのぐらい使えるかを使ってみました!何故か分からないですが、とりあえずJavaのEcho Serverを書かせてみました。その結果は?

アカウント登録が必要

ChatGPTにアクセスすると、まずアカウント登録が必要です。GoogleやMicrosoftのアカウントでも行けるみたいです。

ログインすると、初回は次のように注意画面が表示されます。

ChatGPTは無料のリサーチプレビューであると、

データを集めてるよと、

フィードバックほしいねとのことです。

JavaのEcho Server書かせてみた

早速JavaでどうやったらEcho Server書けるの?と聞いてみました。
How do i make an echo server in java?

なんで英語かって?これを真似してみました。

日本語も行けるはずですが、また今度ということで。
なんでEcho Serverかって?何故かそいつが頭を横切ったからです。

そしたら、、、じゃんじゃん〜

できたソースはこちらになります。

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

public class EchoServer {
  public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = null;
    try {
      serverSocket = new ServerSocket(10007);
    } catch (IOException e) {
      System.err.println("Could not listen on port: 10007.");
      System.exit(1);
    }
    Socket clientSocket = null;
    try {
      clientSocket = serverSocket.accept();
    } catch (IOException e) {
      System.err.println("Accept failed.");
      System.exit(1);
    }
    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(
        new InputStreamReader(
        clientSocket.getInputStream()));
    String inputLine, outputLine;
    while ((inputLine = in.readLine()) != null) {
      outputLine = inputLine;
      out.println(outputLine);
      if (outputLine.equals("Bye."))
        break;
    }
    out.close();
    in.close();
    clientSocket.close();
    serverSocket.close();
  }
}

コンパイル方法も書いてます。

javac EchoServer.java
java EchoServer

そして確認方法について説明もあります。

telnet localhost 10007

Echo Serverを動かしてみた

説明通りにコンパイルして実行すると、待受の状態に入ります。

macOSにはtelnetを入れてないので、ncコマンドで試してみます。
別のターミナルで次のコマンドで接続してみると、無事接続できることを確認できます。

% nc -v localhost 10007
Connection to localhost port 10007 [tcp/mvs-capacity] succeeded!

何か入力すると、すぐ同じ文字列が返ってくることを確認できます。
Bye.入力すると抜けられます。

 

いかがでしょうか?
なんだかもうプログラマも仕事が危うい気がしてきますね。。
特に、実装してほしいと指示を受けて実際コードを作成する初級プログラマですね。

同じ質問もう一回聞いてみた

同じ質問もう一回聞いてみたところ、同じコード生成されるだろうと思いましたが、次のコードが生成されました。
inをoutに出力するところは同じですが、書き方が微妙に違いましたね。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {
    public static void main(String[] args) throws IOException {
        int portNumber = 12345;

        try (
            ServerSocket serverSocket = new ServerSocket(portNumber);
            Socket clientSocket = serverSocket.accept();
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        ) {
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                out.println(inputLine);
            }
        } catch (IOException e) {
            System.out.println("Exception caught when trying to listen on port " + portNumber + " or listening for a connection");
            System.out.println(e.getMessage());
        }
    }
}

今度は通信が終わるBye.の制御がなかったので、少し不親切になりましたね。
試していないですが、ctrl+dで抜けられるはずです。

あえて「昨日の回答と違うんだけど?」聞き返してみました。そしたら、次のようにしっかりした回答も返ってきました。

以前の会話情報を保持していないようですね。

面白いですね!
もう少し実際の作業者相手目線で使えないかを試してみたいと思います。

参考

  1. macOS has a much better tool than telnet for testing remote server connectivity





投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です