投影仪电子化(E_Projector)
问题的产生:软件公司组织内部培训,有时投影仪(资源)紧缺,培训时没有投影仪,在这种情况下每个人只能打开自己的电脑,边听边翻演讲者提供的PPT或者相关资料。这样可能会导致听众不能及时跟上演讲者的思路,以致培训失败。
需求:将投影仪电子化,大家的屏幕显示与演讲者一致。屏幕数20个左右。
设计:开发语言:java
IDE:Eclipse
开发思路:使用socket机制使得演讲者的机器和听众的机器进行通讯。 演讲者的机器作为服务端,听众的机器作为客户端,服务端每隔1秒截屏一次,客户端每个2秒去服务端取一次截屏图片数据并显示。
详细设计:
需求:将投影仪电子化,大家的屏幕显示与演讲者一致。屏幕数20个左右。
设计:开发语言:java
IDE:Eclipse
开发思路:使用socket机制使得演讲者的机器和听众的机器进行通讯。 演讲者的机器作为服务端,听众的机器作为客户端,服务端每隔1秒截屏一次,客户端每个2秒去服务端取一次截屏图片数据并显示。
详细设计:
主程序mainapp.java:
1
package
cn.com.lz.sharescreen;
2 import java.awt.EventQueue;
3
4 import javax.swing.JFrame;
5 import javax.swing.JButton;
6 import javax.swing.JSplitPane;
7 import javax.swing.JToolBar;
8 import javax.swing.JRadioButton;
9 import javax.swing.JTextField;
10 import javax.swing.JLabel;
11 import javax.swing.event.ChangeListener;
12 import javax.swing.event.ChangeEvent;
13 import javax.swing.JDesktopPane;
14 import java.awt.event.ActionListener;
15 import java.awt.event.ActionEvent;
16
17
18 public class mainapp {
19
20 private JFrame frmAgreecomm;
21 private JTextField textField;
22
23 /**
24 * Launch the application.
25 */
26 public static void main(String[] args) {
27 EventQueue.invokeLater( new Runnable() {
28 public void run() {
29 try {
30 mainapp window = new mainapp();
31 window.frmAgreecomm.setVisible( true );
32 } catch (Exception e) {
33 e.printStackTrace();
34 }
35 }
36 });
37 }
38
39 /**
40 * Create the application.
41 */
42 public mainapp() {
43 initialize();
44 }
45
46 /**
47 * Initialize the contents of the frame.
48 */
49 private void initialize() {
50 frmAgreecomm = new JFrame();
51 frmAgreecomm.setTitle( " AGREE_COMM " );
52 frmAgreecomm.setBounds( 100 , 100 , 561 , 245 );
53 frmAgreecomm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
54 frmAgreecomm.getContentPane().setLayout( null );
55
56 JButton btnRun = new JButton( " \u672C\u673A\u5145\u5F53\u670D\u52A1\u7AEF\uFF0C\u5176\u4ED6\u673A\u5668\u53EF\u4EE5\u8FDE\u63A5\u81F3\u672C\u673A " );
57 btnRun.addActionListener( new ActionListener() {
58 public void actionPerformed(ActionEvent e) {
59 ServerScreen frame = new ServerScreen();
60 frame.setVisible( true );
61 }
62 });
63 btnRun.setBounds( 75 , 45 , 410 , 23 );
64 frmAgreecomm.getContentPane().add(btnRun);
65
66 textField = new JTextField();
67 textField.setBounds( 150 , 116 , 124 , 21 );
68 frmAgreecomm.getContentPane().add(textField);
69 textField.setColumns( 10 );
70
71 JLabel lblServerip = new JLabel( " ServerIP\uFF1A " );
72 lblServerip.setBounds( 75 , 119 , 65 , 15 );
73 frmAgreecomm.getContentPane().add(lblServerip);
74
75 JButton btnClose = new JButton( " \u672C\u673A\u8FDE\u63A5\u81F3\u670D\u52A1\u7AEF " );
76 btnClose.addActionListener( new ActionListener() {
77 public void actionPerformed(ActionEvent e) {
78 ClientScreen frame = new ClientScreen(textField.getText());
79
80 }
81 });
82 btnClose.setBounds( 313 , 115 , 168 , 23 );
83 frmAgreecomm.getContentPane().add(btnClose);
84 }
85 }
86
抓图程序:
2 import java.awt.EventQueue;
3
4 import javax.swing.JFrame;
5 import javax.swing.JButton;
6 import javax.swing.JSplitPane;
7 import javax.swing.JToolBar;
8 import javax.swing.JRadioButton;
9 import javax.swing.JTextField;
10 import javax.swing.JLabel;
11 import javax.swing.event.ChangeListener;
12 import javax.swing.event.ChangeEvent;
13 import javax.swing.JDesktopPane;
14 import java.awt.event.ActionListener;
15 import java.awt.event.ActionEvent;
16
17
18 public class mainapp {
19
20 private JFrame frmAgreecomm;
21 private JTextField textField;
22
23 /**
24 * Launch the application.
25 */
26 public static void main(String[] args) {
27 EventQueue.invokeLater( new Runnable() {
28 public void run() {
29 try {
30 mainapp window = new mainapp();
31 window.frmAgreecomm.setVisible( true );
32 } catch (Exception e) {
33 e.printStackTrace();
34 }
35 }
36 });
37 }
38
39 /**
40 * Create the application.
41 */
42 public mainapp() {
43 initialize();
44 }
45
46 /**
47 * Initialize the contents of the frame.
48 */
49 private void initialize() {
50 frmAgreecomm = new JFrame();
51 frmAgreecomm.setTitle( " AGREE_COMM " );
52 frmAgreecomm.setBounds( 100 , 100 , 561 , 245 );
53 frmAgreecomm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
54 frmAgreecomm.getContentPane().setLayout( null );
55
56 JButton btnRun = new JButton( " \u672C\u673A\u5145\u5F53\u670D\u52A1\u7AEF\uFF0C\u5176\u4ED6\u673A\u5668\u53EF\u4EE5\u8FDE\u63A5\u81F3\u672C\u673A " );
57 btnRun.addActionListener( new ActionListener() {
58 public void actionPerformed(ActionEvent e) {
59 ServerScreen frame = new ServerScreen();
60 frame.setVisible( true );
61 }
62 });
63 btnRun.setBounds( 75 , 45 , 410 , 23 );
64 frmAgreecomm.getContentPane().add(btnRun);
65
66 textField = new JTextField();
67 textField.setBounds( 150 , 116 , 124 , 21 );
68 frmAgreecomm.getContentPane().add(textField);
69 textField.setColumns( 10 );
70
71 JLabel lblServerip = new JLabel( " ServerIP\uFF1A " );
72 lblServerip.setBounds( 75 , 119 , 65 , 15 );
73 frmAgreecomm.getContentPane().add(lblServerip);
74
75 JButton btnClose = new JButton( " \u672C\u673A\u8FDE\u63A5\u81F3\u670D\u52A1\u7AEF " );
76 btnClose.addActionListener( new ActionListener() {
77 public void actionPerformed(ActionEvent e) {
78 ClientScreen frame = new ClientScreen(textField.getText());
79
80 }
81 });
82 btnClose.setBounds( 313 , 115 , 168 , 23 );
83 frmAgreecomm.getContentPane().add(btnClose);
84 }
85 }
86
package
cn.com.lz.sharescreen;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class CaptureScreen implements Runnable{
public static void main ( String [] args ) throws InterruptedException{
// 测试生成缩略图
createThumbnail( " c:\\555.gif " , 200 , 200 , 100 , " c:\\uuuu.jpg " );
// 测试捕捉屏幕,每隔一秒捕获一次
String path = " c:\\screen\\ " ;
int i = 0 ;
for ( ;; )
{
i ++ ;
String filepath = path + i + " .jpg " ;
snatchScreen(filepath);
Thread.currentThread().sleep( 2000 );
}
}
/**
* 处理图片,改变起大小,可进行缩略和放大
* @param filename 源文件名称
* @param thumbWidth 处理后宽度
* @param thumbHeight 处理后高度
* @param quality 品质 最高100,最小0
* @param outFilename 输出文件名称
*/
public static void createThumbnail ( String filename, int thumbWidth, int thumbHeight, int quality, String outFilename )
{
Image image = Toolkit.getDefaultToolkit().getImage(filename);
MediaTracker mediaTracker = new MediaTracker( new Container());
mediaTracker.addImage(image, 0 );
try
{
mediaTracker.waitForID( 0 );
double thumbRatio = ( double ) thumbWidth / ( double ) thumbHeight;
int imageWidth = image.getWidth( null );
int imageHeight = image.getHeight( null );
double imageRatio = ( double ) imageWidth / ( double ) imageHeight;
if ( thumbRatio < imageRatio )
{
thumbHeight = ( int ) ( thumbWidth / imageRatio );
}
else
{
thumbWidth = ( int ) ( thumbHeight * imageRatio );
}
BufferedImage thumbImage = new BufferedImage(thumbWidth,
thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0 , 0 , thumbWidth, thumbHeight, null );
BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(outFilename));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
quality = Math.max( 0 , Math.min(quality, 100 ));
param.setQuality(( float ) quality / 100.0f , false );
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
}
catch ( Exception e )
{
e.printStackTrace();
}
}
/**
* 抓取电脑屏幕
* @param path
*/
public static void snatchScreen ( String path )
{
Robot robot;
try
{
robot = new Robot();
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle rect = new Rectangle( 0 , 0 , d.width, d.height);
BufferedImage image = robot.createScreenCapture(rect);
ImageIO.write(image, " jpg " , new File(path));
}
catch ( Exception e )
{
System.out.println( " Failed to snatch screen " );
e.printStackTrace();
}
}
@Override
public void run() {
String path = " c:\\screen\\ " ;
String filepath = path + " cs.jpg " ;
while ( true ){
snatchScreen(filepath);
try {
Thread.currentThread().sleep( 2000 );
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
客户端程序:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class CaptureScreen implements Runnable{
public static void main ( String [] args ) throws InterruptedException{
// 测试生成缩略图
createThumbnail( " c:\\555.gif " , 200 , 200 , 100 , " c:\\uuuu.jpg " );
// 测试捕捉屏幕,每隔一秒捕获一次
String path = " c:\\screen\\ " ;
int i = 0 ;
for ( ;; )
{
i ++ ;
String filepath = path + i + " .jpg " ;
snatchScreen(filepath);
Thread.currentThread().sleep( 2000 );
}
}
/**
* 处理图片,改变起大小,可进行缩略和放大
* @param filename 源文件名称
* @param thumbWidth 处理后宽度
* @param thumbHeight 处理后高度
* @param quality 品质 最高100,最小0
* @param outFilename 输出文件名称
*/
public static void createThumbnail ( String filename, int thumbWidth, int thumbHeight, int quality, String outFilename )
{
Image image = Toolkit.getDefaultToolkit().getImage(filename);
MediaTracker mediaTracker = new MediaTracker( new Container());
mediaTracker.addImage(image, 0 );
try
{
mediaTracker.waitForID( 0 );
double thumbRatio = ( double ) thumbWidth / ( double ) thumbHeight;
int imageWidth = image.getWidth( null );
int imageHeight = image.getHeight( null );
double imageRatio = ( double ) imageWidth / ( double ) imageHeight;
if ( thumbRatio < imageRatio )
{
thumbHeight = ( int ) ( thumbWidth / imageRatio );
}
else
{
thumbWidth = ( int ) ( thumbHeight * imageRatio );
}
BufferedImage thumbImage = new BufferedImage(thumbWidth,
thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0 , 0 , thumbWidth, thumbHeight, null );
BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(outFilename));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
quality = Math.max( 0 , Math.min(quality, 100 ));
param.setQuality(( float ) quality / 100.0f , false );
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
}
catch ( Exception e )
{
e.printStackTrace();
}
}
/**
* 抓取电脑屏幕
* @param path
*/
public static void snatchScreen ( String path )
{
Robot robot;
try
{
robot = new Robot();
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle rect = new Rectangle( 0 , 0 , d.width, d.height);
BufferedImage image = robot.createScreenCapture(rect);
ImageIO.write(image, " jpg " , new File(path));
}
catch ( Exception e )
{
System.out.println( " Failed to snatch screen " );
e.printStackTrace();
}
}
@Override
public void run() {
String path = " c:\\screen\\ " ;
String filepath = path + " cs.jpg " ;
while ( true ){
snatchScreen(filepath);
try {
Thread.currentThread().sleep( 2000 );
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package
cn.com.lz.sharescreen;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.imageio.stream.MemoryCacheImageInputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.border.LineBorder;
import java.awt.Color;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
public class ClientScreen extends JFrame implements Runnable{
private String IP;
Image ima = Toolkit.getDefaultToolkit().getImage( " C:\\360buy1.jpg " );
// ImageIcon ima = new ImageIcon("C:\\360buy1.jpg");
public ClientScreen(String IP) {
setTitle( " \u5BA2\u6237\u7AEF " );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds( 100 , 100 , 668 , 433 );
this .IP = IP;
this .setVisible( true );
new Thread( this ).start();
}
public void paint(Graphics g){
super .paint(g);
g.drawLine( 10 , 10 , 100 , 100 );
g.drawImage(ima, 0 , 0 , this );
}
public void run(){
while ( true ){
try {
Thread.sleep( 2000 );
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MyClient mc = new MyClient();
mc.start();
// System.out.print(111111111);
repaint();
}
}
public class MyClient extends Thread{
Socket socket = null ;
public void run(){
try {
socket = new Socket(IP, 1111 );
DataOutputStream doc = new DataOutputStream(socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
doc.writeUTF( " list11111 " );
doc.flush();
long len = in.readLong();
System.out.print(len);
FileInputStream fis = new FileInputStream((File)in.readObject());
byte [] b = new byte [( int ) len];
fis.read(b);
ima = Toolkit.getDefaultToolkit().createImage(b);
fis.close();
doc.close();
in.close();
doc.close();
in.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}
}
}
服务端程序:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.imageio.stream.MemoryCacheImageInputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.border.LineBorder;
import java.awt.Color;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
public class ClientScreen extends JFrame implements Runnable{
private String IP;
Image ima = Toolkit.getDefaultToolkit().getImage( " C:\\360buy1.jpg " );
// ImageIcon ima = new ImageIcon("C:\\360buy1.jpg");
public ClientScreen(String IP) {
setTitle( " \u5BA2\u6237\u7AEF " );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds( 100 , 100 , 668 , 433 );
this .IP = IP;
this .setVisible( true );
new Thread( this ).start();
}
public void paint(Graphics g){
super .paint(g);
g.drawLine( 10 , 10 , 100 , 100 );
g.drawImage(ima, 0 , 0 , this );
}
public void run(){
while ( true ){
try {
Thread.sleep( 2000 );
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MyClient mc = new MyClient();
mc.start();
// System.out.print(111111111);
repaint();
}
}
public class MyClient extends Thread{
Socket socket = null ;
public void run(){
try {
socket = new Socket(IP, 1111 );
DataOutputStream doc = new DataOutputStream(socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
doc.writeUTF( " list11111 " );
doc.flush();
long len = in.readLong();
System.out.print(len);
FileInputStream fis = new FileInputStream((File)in.readObject());
byte [] b = new byte [( int ) len];
fis.read(b);
ima = Toolkit.getDefaultToolkit().createImage(b);
fis.close();
doc.close();
in.close();
doc.close();
in.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}
}
}
package
cn.com.lz.sharescreen;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JEditorPane;
public class ServerScreen extends JFrame {
private JPanel contentPane;
public JEditorPane editorPane;
public ServerScreen() {
setTitle( " Server " );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds( 100 , 100 , 399 , 446 );
contentPane = new JPanel();
contentPane.setBorder( new EmptyBorder( 5 , 5 , 5 , 5 ));
contentPane.setLayout( new BorderLayout( 0 , 0 ));
setContentPane(contentPane);
editorPane = new JEditorPane();
contentPane.add(editorPane, BorderLayout.CENTER);
MyServer myserver = new MyServer();
myserver.start();
new Thread( new CaptureScreen()).start();
}
public class MyServer extends Thread {
public MyServer(){
super ();
editorPane.setText( " Welcome to use Agree_Comm " + " \n " );
}
public void run(){
doListen();
}
public void doListen() {
ServerSocket server;
try {
server = new ServerSocket( 1111 );
while ( true ) {
Socket client = server.accept();
new Thread( new SSocket(client)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 服务器进程
class SSocket implements Runnable {
Socket client;
public SSocket(Socket client) {
this .client = client;
}
public void run() {
DataInputStream input;
ObjectOutputStream output;
try {
File img = new File( " C:\\screen\\cs.jpg " );
input = new DataInputStream(client.getInputStream());
output = new ObjectOutputStream(client.getOutputStream());
//
String listMsg = input.readUTF();
Toolkit t = getToolkit();
long fis_len = img.length();
System.out.print( " fis_len: " + fis_len);
output.writeLong(fis_len);
output.flush();
editorPane.setText(editorPane.getText() + " \n " + " Recive: " + listMsg);
// System.out.println("Recive: " + listMsg);
// listMsg = input.readUTF();
// output.writeUTF("Recive Second: " + listMsg + " \r\n Thx");
// editorPane.setText(editorPane.getText()+"\n"+"Recive: " + listMsg);
// System.out.println("Recive Second: " + listMsg);
output.writeObject(img);
output.flush();
input.close();
output.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
finally {
}
}
}
}
}
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JEditorPane;
public class ServerScreen extends JFrame {
private JPanel contentPane;
public JEditorPane editorPane;
public ServerScreen() {
setTitle( " Server " );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds( 100 , 100 , 399 , 446 );
contentPane = new JPanel();
contentPane.setBorder( new EmptyBorder( 5 , 5 , 5 , 5 ));
contentPane.setLayout( new BorderLayout( 0 , 0 ));
setContentPane(contentPane);
editorPane = new JEditorPane();
contentPane.add(editorPane, BorderLayout.CENTER);
MyServer myserver = new MyServer();
myserver.start();
new Thread( new CaptureScreen()).start();
}
public class MyServer extends Thread {
public MyServer(){
super ();
editorPane.setText( " Welcome to use Agree_Comm " + " \n " );
}
public void run(){
doListen();
}
public void doListen() {
ServerSocket server;
try {
server = new ServerSocket( 1111 );
while ( true ) {
Socket client = server.accept();
new Thread( new SSocket(client)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 服务器进程
class SSocket implements Runnable {
Socket client;
public SSocket(Socket client) {
this .client = client;
}
public void run() {
DataInputStream input;
ObjectOutputStream output;
try {
File img = new File( " C:\\screen\\cs.jpg " );
input = new DataInputStream(client.getInputStream());
output = new ObjectOutputStream(client.getOutputStream());
//
String listMsg = input.readUTF();
Toolkit t = getToolkit();
long fis_len = img.length();
System.out.print( " fis_len: " + fis_len);
output.writeLong(fis_len);
output.flush();
editorPane.setText(editorPane.getText() + " \n " + " Recive: " + listMsg);
// System.out.println("Recive: " + listMsg);
// listMsg = input.readUTF();
// output.writeUTF("Recive Second: " + listMsg + " \r\n Thx");
// editorPane.setText(editorPane.getText()+"\n"+"Recive: " + listMsg);
// System.out.println("Recive Second: " + listMsg);
output.writeObject(img);
output.flush();
input.close();
output.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
finally {
}
}
}
}
}
聚沙成洲,奋发超越。