2016年4月20日水曜日

Webサーバー&UI


import java.io.*;

import java.awt.*;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.awt.event.InputEvent;

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;
import java.awt.Color;
import java.awt.BasicStroke;

public class CountReadPacket{
public static void main(String args[]) {

WindowTest windowTest=new WindowTest();
int viewcounter=0;
//windowTest.labelChange(viewcounter);
int i = 1, PORT = 8080;
ServerSocket server = null;
try {
server = new ServerSocket(PORT);
System.out.println("Web Server is listening on port "+ server.getLocalPort());

while (true) {
Socket client = server.accept();

ConnectionThread ct = new ConnectionThread(client, i,windowTest);
ct.start();
viewcounter++;
//windowTest.labelChange(viewcounter);
i++;
}
} catch (Exception e) {
System.out.println(e);
}
}

static class ConnectionThread extends Thread {
Socket client;
int counter;
WindowTest windowTest;

public ConnectionThread(Socket cl, int c,WindowTest _windowTest) {
client = cl;
counter = c;
windowTest=_windowTest;

}

public void run() {
try {
String destIP = client.getInetAddress().toString();
int destport = client.getPort();
System.out.println("Connection " + counter + " connected from "+ destIP + " with port " + destport + ".");
PrintStream outstream = new PrintStream(client.getOutputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));

String inline = reader.readLine();
String target = null;
while (reader.ready() && inline != null) {
if(target == null){
target = inline;
}
//System.out.println(inline);
inline = reader.readLine();
}
System.out.println(target);

String responseFile = "test.html";
File file = new File(responseFile);

sendfile(outstream, file);

String[] str1Ary = target.split(";",-1);
if (str1Ary.length > 3){
System.out.println(str1Ary[1]);
System.out.println(str1Ary[2]);
System.out.println(str1Ary[3]);
windowTest.labelChange(Double.parseDouble(str1Ary[1]),Double.parseDouble(str1Ary[2]),Double.parseDouble(str1Ary[3]));
}

outstream.println("HTTP/1.0 200 OK");
outstream.println("MIME_version:1.0");
outstream.println("Content_Type:text/html");
int len = (int) file.length();
outstream.println("Content_Length"+len);
outstream.println("");

outstream.flush();
outstream.close();
System.out.println("---------------------------------------------");
} catch (Exception e) {
// TODO: handle exception
}

return;
}
void sendfile(PrintStream outs, File file) {
try {
DataInputStream in = new DataInputStream(new FileInputStream(file));
int len = (int) file.length();
byte buf[] = new byte[len];
in.readFully(buf);
outs.write(buf, 0, len);
outs.flush();
in.close();
} catch (Exception e) {
System.out.println("Error sending file.");
System.exit(1);
}
}

}
}

class WindowTest{
String regA="";
Label label;//表示用の部品(ここではラベル)を宣言
ShapeTest1 app;
  //コンストラクタ
  WindowTest(){

    //Windowを作る
    JFrame frame;//Frame 型変数を宣言
    frame=new JFrame("Window Test");//Frame型変数に初期値をセット
    //frame.setSize(600, 600);//サイズを指定す
    //frame.setVisible(true);//可視化する

    //WIndowに表示する。
    /*label=new Label(regA);//表示用部品に初期値をセット
    label.setFont(new Font("MS ゴシック", Font.BOLD, 240));
    label.setPreferredSize(new Dimension(400,400));
    label.setAlignment(Label.CENTER);
    frame.add(label);*///表示用の部品をWindowに追加
   
    app = new ShapeTest1();
    frame.getContentPane().add(app);
   
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
   
    regA = "hoge";
  }
  void labelChange(double _xg,double _yg,double _zg){
   //regA = String.valueOf(i);
   //label.setText(regA);
   app.setValue(_xg,_yg,_zg);
   app.repaint();
  }
}

class ShapeTest1 extends JPanel{
int count = 0;
double xg;
double yg;
double zg;

public void setValue(double _xg,double _yg,double _zg){
xg = _xg;
yg = _yg;
zg = _zg;
}

  public void paintComponent(Graphics g){
   count++;
    Graphics2D g2 = (Graphics2D)g;
   
    Dimension size = getSize();
        int d = Math.min(size.width, size.height);
        int x = (size.width - d*3)/2;
        int y = (size.height - d*3)/2;

        // 円を描く(色は前景色にすでにセットされている)
       
        g.setColor(Color.white);
        g.fillOval(x, y, d*3, d*3);
        g.setColor(Color.black);

    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
    g2.draw(new Line2D.Double(30.0, 10.0, 30.0+10.0*xg, 10.0-10.0*yg));

    g2.setPaint(Color.PINK);
    BasicStroke wideStroke = new BasicStroke(4.0f);
    g2.setStroke(wideStroke);
    g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d));
  }
}

0 件のコメント:

コメントを投稿