java ソケット基本のk
復習も兼ねてjavaでソケット通信を行うやり方の基本のki、、いや、基本のkをメモっておく。
流れとしては
サーバーソケットを作る
クライアントの接続を受け付ける
何やらする
って感じ。
- サーバーソケットを作る
ServerSocket s = new ServerSocket(PORTNO);
これだけ?PORTNOにはポート番号を。
- クライアントの接続を受け付ける
Socket ss = s.accept();
これだけ?接続されるまでは待ち状態になるのかな。IOExceptionが発生するらしいのでtry-catchで。
練習としてクライアントが整数を入力するとサーバーが二倍した値を返すデモを作ってみた。
import java.io.*; import java.net.*; import java.io.File; import java.io.FileReader; import java.util.*; public class Socket01{ final public int PORTNO = 10000; ServerSocket s; public Socket01(){ try{ s = new ServerSocket(PORTNO); }catch(IOException e){ System.err.println(e); System.exit(1); } } public void start(){ try{ Socket ss = s.accept(); while(true){ BufferedReader rin = new BufferedReader(new InputStreamReader(ss.getInputStream())); DataOutputStream rout = new DataOutputStream(ss.getOutputStream()); String number = rin.readLine(); int i = Integer.parseInt(number); rout.writeBytes(i+" * 2 = "+Integer.toString(i*2)+"\n"); } }catch(IOException e){ System.err.println(e); } } public static void main(String[] args){ Socket01 socketinstance = new Socket01(); socketinstance.start(); } }
サーバー側を立ち上げておいてtelnetかなんかでやる。おかしなとこあるかもしれない。
URLConnectionクラスとかいうのもあって面白そうだからそのうちそれも見てみる。
法政の遺伝的アルゴリズムの課題
日曜日に法政の友達の課題を手伝ってみた。
なにやら遺伝的アルゴリズムを用いて理想的なドアの閉じ方を見つけるらしい。
流れとしては以下のようにする。
- 1世代目の個体をN個作る。
- こうさ(漢字わかりませんでした)を用いて個体の要素を入れ替える。
- 評価関数を用いて良さげな個体を選ぶ。
- 2,3を何回か行い2世代目の個体をN個つくる。
- 収束していくまで繰り返し良さげな個体を選ぶ。
評価関数はRunge-kuttaを使うように指定されていて、どうやら速度と距離を積分で出してるっぽい。
また、たまに値を別のものにする突然変異を2の後に行うことがある。ニューラルネットワークでいるdropoutと似てるのかも。自分的には5%くらいでいいだろと思ったが友達は50%がいいと言っていた。それもう突然変異じゃなくね。
だんだん収束していくのを見るのが面白かった。
参考:
https://qiita.com/Azunyan1111/items/975c67129d99de33dc21 7/10 2018
Sample01.blog
printf(“%s\n”,”Hello,World!!”);