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));
}
}
2016年4月10日日曜日
登録:
投稿 (Atom)