import java.io.*;
import java.net.*;
public class TestThread extends Thread {
Socket socket = null;
public void setSocket(Socket socket)
{
this.socket = socket;
}
/*
* 処理部分
*/
public void run()
{
if ( socket == null )
{
return;
}
try
{
//--------------------
//受信する
//--------------------
InputStream is1
=socket.getInputStream();
InputStreamReader ir1
= new InputStreamReader(is1);
BufferedReader br1 = new BufferedReader(ir1);
// よみこめるまでまってる
while(is1.available() == 0);
// 1行読み込む
int c;
String header = "";
while((c = br1.read()) != -1 )
{
header = header + (char)c;
if (( header.indexOf("¥n¥n") > 0 ) ||
( header.indexOf("¥r¥n¥r¥n") > 0 ) )
{
break;
}
}
// データ部分の長さを取得
String[] line = header.split("¥n");
int datalen = -1;
for(int i = 0 ; i < line.length; i ++ )
{
if ( line[i].indexOf("Content-Length:") >= 0 )
{
String lenbuf
= line[i].substring("Content-Length:".length());
try{
datalen = Integer.parseInt(lenbuf.trim());
}catch(Exception e){
}
}
}
// データがある場合、データ取得
String data = "";
if ( datalen > 0 )
{
char[] datachar = new char[datalen];
br1.read(datachar);
StringBuffer databuf = new StringBuffer();
databuf.append(datachar);
data = databuf.toString();
}
//--------------------
// 処理
//--------------------
// データがある場合、ファイル名、データ取得
String fname="";
if ( data.length() > 0 )
{
// 改行をカットする
data = data.replaceAll("¥r","");
data = data.replaceAll("¥n","");
// ファイル名とデータきりだし
String[] dline = data.split("&");
for(int i = 0 ; i < dline.length ; i ++ )
{
String[] cell = dline[i].split("=");
if ( cell[0].compareTo("fname") == 0 )
{
fname = cell[1];
}
}
}
// プログラム実行
if (fname.length() > 0 )
{
try
{
// 適当に、コード変換
fname = URLDecoder.decode(fname,"UTF-8");
// プロセス実行
Process process = Runtime.getRuntime().exec(fname);
}
catch(Exception e)
{
}
}
//--------------------
//送信する
//--------------------
OutputStreamWriter ow1
= new OutputStreamWriter(socket.getOutputStream());
BufferedWriter bw1 = new BufferedWriter(ow1);
bw1.write("OK");
bw1.flush();
// クローズ
bw1.close();
ow1.close();
br1.close();
ir1.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
|