`
百合不是茶
  • 浏览: 345593 次
社区版块
存档分类
最新评论

网络画图板(一)

阅读更多

 

网络画图板;客户端在向服务器发送信息的时候需要定义发送的协议, 简称通信协议

 

形状类型   int type;  0直线   1矩形   2椭圆

形状数据  int x1,y1,x2,y2;

 

服务器;只需要不停的接受客户端,转发给另外的客户端

客户端;需要有界面,通信协议,

 

服务器

 

 客户端一上面画



 

客户端二上面也会有

 

 

 

服务器:

package 远程演示服务器;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

/**
 * 服务器的主类
 * 
 * @author Administrator
 * 
 */
public class ServerMain {
	// static不能定义在main方法里面
	public static ArrayList<Socket> socketlis = new ArrayList<Socket>();

	public static void main(String[] args) {
		boolean islive = true;
		try {
			ServerSocket server = new ServerSocket(9090);
			System.out.println("等待连接客户端...");

			while (islive) {
				Socket socket = server.accept();
				ServerThread th = new ServerThread(socket);
				th.start();
				socketlis.add(socket);
				System.out.println(socket.getInetAddress().getHostName()
						+ "连上服务器");

			}
		} catch (IOException e) {
			islive = false;
			System.out.println("端口不存在,,");

		}
	}
}

 

服务器线程来转发数据

package 远程演示服务器;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 使用线程将绘制的内容发给其他的客户端
 * 
 * @author Administrator
 * 
 */
public class ServerThread extends Thread {

	private Socket socket;

	public ServerThread(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		try {
			//获取输入流
			InputStream is = socket.getInputStream();
			DataInputStream dis = new DataInputStream(is);
			while (true) {
				int type = dis.readInt();
				int x1 = dis.readInt();
				int y1 = dis.readInt();
				int x2 = dis.readInt();
				int y2 = dis.readInt();

				// 转发给其它客户端

				for (int i = 0; i < ServerMain.socketlis.size(); i++) {
					Socket sc = ServerMain.socketlis.get(i);
					if (sc != socket) {
						OutputStream os = sc.getOutputStream();
						DataOutputStream dos = new DataOutputStream(os);

						dos.writeInt(type);
						dos.writeInt(x1);
						dos.writeInt(y1);
						dos.writeInt(x2);
						dos.writeInt(y2);
						dos.flush();

					}
				}

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

 

 

 

 

 

客户端主界面

package 远程演示客户端;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * 远程演示客户端
 * 
 * @author Administrator
 * 
 */
public class DrawUI extends JFrame {
	public static void main(String[] args) {
		new DrawUI();
	}

	private JTextField ipFiled;
	private JTextField portFiled;
	private JButton Btn;
	private JPanel centenr;
	private Socket socket;

	public DrawUI() {
		this.setTitle("远程演示");
		this.setSize(500, 500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(new BorderLayout());

		// 绘制区域
		centenr = new JPanel();
		this.add(centenr,BorderLayout.CENTER);
		// 右边聊天区域
		JPanel right = new JPanel();
		right.setPreferredSize(new Dimension(100, 100));
		right.setBackground(Color.lightGray);
		this.add(right, BorderLayout.EAST);
		// 下边ip设置
		JPanel bottom = new JPanel();
		bottom.setPreferredSize(new Dimension(500, 50));
		bottom.setBackground(Color.lightGray);
		this.add(bottom, BorderLayout.SOUTH);

		// 设置默认的ip和端口
		JLabel iplabel = new JLabel("IP");
		ipFiled = new JTextField("127.0.0.1", 15);
		JLabel portlabel = new JLabel("port");
		portFiled = new JTextField("9090", 10);

		Btn = new JButton("连接服务器");

		// 创建监听器对象
		BtnLisetenr blis = new BtnLisetenr();
		Btn.addActionListener(blis);
		// 将组件添加到窗体下部
		bottom.add(iplabel);
		bottom.add(ipFiled);
		bottom.add(portlabel);
		bottom.add(portFiled);
		bottom.add(Btn);
  
		this.setResizable(false);
		this.setVisible(true);

		//创建监听器对象
		ClientLis lis = new ClientLis(this, centenr);
		centenr.addMouseListener(lis);

	}

	// 获得客户端

	public Socket getSocket() {
		return socket;
	}

	// 添加链接服务器的监听器
	class BtnLisetenr implements ActionListener {

		

		@Override
		public void actionPerformed(ActionEvent e) {
			String str = e.getActionCommand();
			if (str.equals("连接服务器")) {
				// 获得输入框中的ip和端口
				String ip = ipFiled.getText().trim();
				String ports = portFiled.getText().trim();
				// 在客户端的创建中端口是整型的,所以需要将端口字符串转换成整形
				int port = Integer.parseInt(ports);
				try {
					socket = new Socket(ip, port);
					//启动接收消息的线程
					receiveThread th = new receiveThread(socket, centenr);
					th.start();

					Btn.setText("已经连接上服务器..");
				} catch (Exception e1) {
					e1.printStackTrace();
				}
			}
		}
	}

}

 

客户端监听器类

package 远程演示客户端;

/*
 * 监听器类
 */
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

import javax.swing.JPanel;

public class ClientLis extends MouseAdapter {

	private int x1, y1, x2, y2;
	private JPanel centenr;
	private DrawUI ui;
	Graphics g;

	public ClientLis(DrawUI ui, JPanel centenr) {
		this.ui = ui;
		this.centenr = centenr;
	}

	// 按下
	public void mousePressed(MouseEvent e) {
		// 获得画布和按下的坐标
		g = centenr.getGraphics();
		x1 = e.getX();
		y1 = e.getY();

	}

	// 释放
	public void mouseReleased(MouseEvent e) {

		// 获得释放时的坐标
		x2 = e.getX();
		y2 = e.getY();

		g.drawLine(x1, y1, x2, y2);
		Send();

	}

	// 将绘制的消息发送给服务器
	public void Send() {
		// 获得socket
		Socket socket = ui.getSocket();
		if (socket != null) {
			try {
				OutputStream os = socket.getOutputStream();
				DataOutputStream oos = new DataOutputStream(os);
				oos.writeInt(0);
				oos.writeInt(x1);
				oos.writeInt(y1);
				oos.writeInt(x2);
				oos.writeInt(y2);
				oos.flush();

			} catch (IOException e) {
				e.printStackTrace();
			}

		} else {
			javax.swing.JOptionPane.showMessageDialog(null, "网络不通!!!");
		}

	}

}

 

客户端线程类,定义通信协议

package 远程演示客户端;

import java.awt.Graphics;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;

import javax.swing.JPanel;

/**
 * 处理客户端接受服务器的消息
 * 
 * @author Administrator
 * 
 */
public class receiveThread extends Thread {

	private JPanel centenr;
	private Socket socket;
	boolean islive = true;
	private DataInputStream dis;
	private Graphics g;

	public receiveThread(Socket socket, JPanel centenr) {
		this.socket = socket;
		this.centenr = centenr;

		try {
			// 创建输入流
			InputStream is = socket.getInputStream();
			dis = new DataInputStream(is);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void run() {
		while (islive) {
			try {
				int type = dis.readInt();
				int x1 = dis.readInt();
				int y1 = dis.readInt();
				int x2 = dis.readInt();
				int y2 = dis.readInt();
				g = centenr.getGraphics();
				if (type == 0) {
					g.drawLine(x1, y1, x2, y2);
				}

			} catch (Exception ef) {
				islive = false;
				ef.printStackTrace();
			}

		}

	}
}

 

 

 

 

  • 大小: 35.5 KB
  • 大小: 79.4 KB
  • 大小: 79.4 KB
0
0
分享到:
评论
1 楼 qindongliang1922 2014-09-09  
图像看着很给力,写的比较用心,赞一个,java swing这种技术,楼主还在研究吗,公司有用吧

相关推荐

    Java画图板,支持网络同步

    一个Java的画图板程序,支持网络同步功能!还是不错的,^_^

    java网络画板(联网画图板)

    用java编写的网络画板应用,应用socket技术,可选择当客户端以及服务器端,局域网连接,可实时聊天,实时显示多方所画内容,可选线条粗细,颜色,实线虚线,以及图形样式,界面简洁,功能强大方便扩展,通过多线程可...

    ML Visuals 11.11深度学习框架画图模板

    ML Visuals 专为解决神经网络画图问题设计。ML Visuals 现在包含了 100 多个可用的自定义图形,使用者可以在任何论文、博客、PPT 中使用这些资源。这份 101 页的模板共包含几个部分:基础组件、架构、机器学习概念、...

    Visio画的卷积神经网络结构图模板

    该资源采用Visio绘图软件制作,包含卷积池化操作的绘图,以及线性层的绘图。供各位网友参考。

    神经网络画图,PPT素材

    但问题是一些免费的画图工具效果不佳,要么图片不好看,要么就得从头到尾一点点设计,好一点像亿图这样的软件又得花钱,花了钱但又用不了几次。 那还不如用PPT画,这份PPT共160页,所有的素材均可编辑。照着模板改...

    科研绘图/画图 - 神经网络结构示意图ppt绘制模板,包含各种类型的神经网络结构(平面,立体3d效果)和各种图例

    科研绘图 - 神经网络结构图ppt绘制模板,包含各种类型的神经网络结构(平面,立体3d效果)和各种图例,总有一个模板是你所需要的。 科研绘图 - 神经网络结构图ppt绘制模板,包含各种类型的神经网络结构(平面,立体...

    计算机图形学课程设计带报告,OpenGL、Qt,图形绘制系统,画图板,release版,exe直接运行.zip

    网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据...

    java 网络绘画板

    这是一个基于java socket连接实现的简单GUI网络画图白板程序,项目文件中app package中的MultiServer.java是服务端监听程序的主程序;Client.java是客户端启动程序。运用面向对象程序设计思想,基于java的GUI、套接字...

    一款超强的图形系统——Delphi源码Delphi-source-VG7.23

    这是一套是一套非常完善的图形系统,适合在电力、煤炭、化工、仿真、网络、自动化等各种工业监控软件以及图形建模、图形管理、图形分析、中小型GIS系统、工作流、中文表格、表单、工程绘图等软件项目中应用。...

    ​  ML Visuals ​

    ​ 去年 5 月,github上出现一款名为 ML Visuals 的机器学习画图模板,该项目受到广泛关注,迄今已收获 6.1K Star。ML Visuals 专为解决神经网络画图问题设计。 ​

    常用Windows管理命令

    mspaint 画图板 mstsc 远程桌面连接 narrator 屏幕"讲述人" net stop messenger 停止信使服务 net start messenger 开始信使服务 netstat an (TC)命令检查接口 notepad 打开记事本 nslookup 网络...

    PCB板的简单制作

    简单的PCB入门制作,简单的画图以及形成网络表,最终制作双单面PCB板。

    带服务器端和客户端的网络白板

    简单的网络白板,一个是服务器端,一个是客户端,每一方画图,对方都有看到。

    LSTM框架图PPT高清

    我自己用PPT重新画了一个LSTM的框架图,可以导出高清格式图片,放在投稿的小论文里面。导出方式如下: 1用office的powerpoint打开下载的LSTM.pptx文件; 2.在office中设置,保证可导出高分辨率图片,可参考...

    java网络白板

    自己写的一个网络白板程序,有客户端和服务器端,服务器实现多线程,并且可以实时显示连接数及连接的ip,客户端实现绘图功能,并把图像发到服务器端,服务器转发给其他客户端。代码是用java写的,采用的基本Server/...

    论文:JSP绘图聊天室系统设计与实现.nh

    JavaBean,JavascriPt以及数据库访问技术来完整构建一个网络聊天室系统项 目,从而进一步研究web项目开发的系统分析过程,通过与相关的编程技术相 结合的方式来实现网络聊天室系统前台与后台的功能,以便进一步的...

    Python圣诞树代码

    下面是我画的一棵简易的圣诞树,虽然和网络上大佬们的圣诞树相比不是很精致,但是对于萌新们来说,画这样一棵简易的圣诞树还是非常轻松的。 ps:重要的不是圣诞树,重要的是你的心意哦~ 一、让我们先来学习Python...

    电子科技大学机器学习大作业.7z

    试编程实现累积BP算法,在西瓜数据集2.0上(用训练数据)训练一个单隐层网络,用验证集计算出均方误差。要自己实现,不能直接调用现成的库函数。 作业四 下载并安装libsvm,http://www.csie.ntu.edu.tw/~cjlin/libsvm/...

Global site tag (gtag.js) - Google Analytics