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クラスとかいうのもあって面白そうだからそのうちそれも見てみる。