package jp.gr.java_conf.nagata;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* @author learning
* 2012/04/24 新規作成
*
* ソケット通信を行うテストプログラム
*/
public class SocketTest {
public static void main(String args){
// 例のごとく2ちゃんにつなぐ(嫌儲)
String host = "engawa.2ch.net";
String path = "/poverty/subject.txt";
String referer = "http://engawa.2ch.net/poverty/";
int port = 80;
int c = 0;
Socket socket = null;
InputStream in = null;
OutputStream out = null;
ByteArrayOutputStream bout = null;
try {
// ソケット通信用クラスのインスタンスを用意し、ストリームを得る
socket = new Socket(host, port);
in = socket.getInputStream();
out = socket.getOutputStream();
bout = new ByteArrayOutputStream();
// 電文用Stringを用意する
String telegram = "GET " + path + " HTTP/1.1\r\n" +
"Accept-Encoding: text/plain \r\n" +
"Host: " + host + ":" + port + "\r\n" +
"Accept: */*\r\n" +
"Referer: " + referer + "\r\n" +
"Accept-Language: ja \r\n" +
"User-Agent: Mozilla/5.0 \r\n" +
"Connection: close \r\n\r\n";
// バイト型にする
out.write(telegram.getBytes());
out.flush();
// 終端が来るまでwhileで回す
while ((c = in.read()) != -1) {
bout.write(c);
}
// きれいにバイト配列に変換できる。やったぜベイビー
byte barray = bout.toByteArray();
String show = new String(barray, "Shift_JIS");
System.out.print(show);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// リソースを閉じる、リソースごとにクローズ用クラスを作って閉じたほうがいい
try {
socket.close();
in.close();
out.close();
bout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}