Java小程序之简易网络画板
package Server;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;public class Myserver {public ServerSocket server;public static ArrayList<ServerThread> list = new ArrayList<ServerThread>();public void startServer() {try {server = new ServerSocket(9090);System.out.println("服务器已经建立......");while(true){Socket socket =server.accept();System.out.println("有客户端连接进来了......");ServerThread st = new ServerThread(socket);st.start();
// System.out.println("线程启动......");list.add(st);}} catch (Exception e) {e.printStackTrace();}}}
package Server;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;import javax.swing.JOptionPane;public class ServerThread extends Thread{public Socket socket;public DataInputStream dis ;public DataOutputStream dos;public ServerThread(Socket socket) {this.socket=socket;}public void run() {try {//获取输入输出流InputStream ins =socket.getInputStream();OutputStream ous = socket.getOutputStream();//将字节流包装成数据流dis=new DataInputStream(ins);dos=new DataOutputStream(ous);while(true){int value=dis.read();
// System.out.println(value);//服务器转发消息for (int i = 0; i <Myserver.list.size(); i++) {ServerThread st =Myserver.list.get(i);if(st!=this){st.dos.write(value);st.dos.flush();}}
// System.out.println("服务器已经发送消息");}}catch (SocketException e) {try {Myserver.list.remove(this);this.socket.close();System.out.println("客户端已经退出......");
// JOptionPane.showMessageDialog(null, "客户端退出!");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}
// e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
}
服务器端主函数
package Server;public class ServerTest {public static void main(String[] args) {Myserver ms = new Myserver();ms.startServer();}}
客户端
package com.huaxin.view;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JFrame;import com.huaxin.controller.ClientControl;
public class DrawUI extends JFrame{public Socket socket;public Graphics2D g;public ClientControl control;//界面初始化的socketpublic DrawUI() {try {socket = new Socket("localhost",9090);} catch (Exception e) {e.printStackTrace();} }public void initFrame() {//设置窗体属性this.setTitle("网络画板");this.setSize(600, 500);this.setDefaultCloseOperation(3);this.setLocationRelativeTo(null);this.setVisible(true);//拿到窗体的画笔g = (Graphics2D)this.getGraphics();g.setColor(Color.RED);//控制器初始化control = new ClientControl(g,socket);//添加鼠标监听DrawListener listener = new DrawListener(control);this.addMouseListener(listener);this.addMouseMotionListener(listener);//控制器接收数据并处理数据control.receiveData();}}
package com.huaxin.view;import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;import com.huaxin.controller.ClientControl;public class DrawListener extends MouseAdapter {public int x1,y1,x2,y2,x4,y4;public ClientControl control;//构造函数接受控制器对象public DrawListener(ClientControl control) {this.control=control;}//监听鼠标按下事件public void mousePressed(MouseEvent e) {//获取鼠标按下的坐标值x1=e.getX();y1=e.getY();x4=x1;y4=y1;}//获取鼠标释放的坐标值
// public void mouseReleased(MouseEvent e) {
// x2=e.getX();
// y2=e.getY();
// //当鼠标释放的时候在该画板上绘制一条直线
// control.g.drawLine(x4, y4, x2, y2);
// //第一个1代表图形类型,第二个1代表画笔 粗细
// //将直线信息通过控制器发送给服务器端
// control.sendData(1,x4, y4, x2, y2,1);
// }//监听鼠标拖动事件(铅笔功能)public void mouseDragged(MouseEvent e) {int x3=e.getX();int y3=e.getY();control.g.drawLine(x1, y1, x3, y3);control.sendData(1,x1, y1, x3, y3,1);x1=x3;y1=y3;}
}
package com.huaxin.controller;import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class ClientControl {private Socket socket;public int x1,y1,x2,y2,color;public byte type,strock;public Graphics2D g;public ClientControl(Graphics2D g,Socket socket) {this.g=g;this.socket=socket;}//不断接受服务器发送过来的信息public void receiveData(){new Thread(){public void run() {try {while(true){//获取输入输出流InputStream ins = socket.getInputStream();OutputStream ous=socket.getOutputStream();//将字节流包装成数据流DataInputStream dis=new DataInputStream(ins);DataOutputStream dos= new DataOutputStream(ous);
// System.out.println("kehuduan kaishi dushuju。。。。。。");//读图形类型type=dis.readByte();//读坐标x1=dis.readInt();y1=dis.readInt();x2=dis.readInt();y2=dis.readInt();//读粗细strock=dis.readByte();//读颜色color=dis.readInt();//读完数据之后画图形
// System.out.print("客户端接受数据:");
// System.out.println("type:"+type+"x1:"+x1+"y1:"+y1+"x2:"+y2+"strock:"+strock+"Color:"+type);drawGra();}} catch (Exception e) {
// System.out.println("kehuudan tuichu。。。。。");e.printStackTrace();}};}.start();}//发送图形数据给服务器public void sendData(int type,int x1,int y1,int x2,int y2,int strock){try {//获取输入输出流InputStream ins = socket.getInputStream();OutputStream ous=socket.getOutputStream();//将字节流包装成数据流DataInputStream dis=new DataInputStream(ins);DataOutputStream dos= new DataOutputStream(ous);//写图形类型dos.writeByte(type);//写坐标dos.writeInt(x1);dos.writeInt(y1);dos.writeInt(x2);dos.writeInt(y2);//写粗细dos.writeByte(strock);//写颜色dos.writeInt(g.getColor().getRGB());dos.flush();
// System.out.println("type:"+type+"x1:"+x1+"y1:"+y1+"x2:"+y2+"strock:"+strock+"Color:"+type);
// System.out.println("客户端已经发送数据......");} catch (Exception e) {e.printStackTrace();}}//绘制图形public void drawGra() {g.setColor(new Color(color));g.setStroke(new BasicStroke(strock));if(type==1){g.drawLine(x1, y1, x2, y2);
// System.out.println("hutu 。。。。。");}}}
package com.huaxin.view;public class ClientTest {public static void main(String[] args) {DrawUI ui = new DrawUI();ui.initFrame();}
}
五、运行结果:
Java小程序之简易网络画板相关推荐
- Java实现的一个简易网络画板
文章目录 前言 一.准备工作 二.代码 1.客户机 2.服务器 前言 主要功能: 类似于腾讯会议. 客户机获取电脑摄像头拍的照片(视频)实时发给服务器.再两端的界面同时显示.客户机上还可以画图,并发给 ...
- Java小程序——模仿Win系统画板
好久之前的一个小作业,用Java实现画板.毕竟当时花费不少功夫调试,在这里分享给大家,希望能够对需要的小伙伴有所帮助!声明一下,以下代码为参考网上相关代码修改,绝非完全原创. 运行效果图如下: 话不多 ...
- ssm springboot网络订餐点餐跑腿系统java 小程序025
现阶段由于人们生活.工作.学习等节奏的加快,人们很重视时间的经济效应.尤其是在大学校园,随着校园的面积不断扩大.学校专业不断增多而导致的学生人数较以往大幅增加,加之学生的课业比较繁重,传统的食堂排队就 ...
- Wifi热点java_用笔记本电脑开启热点Java小程序
用笔记本电脑开启热点Java小程序是一条命令设置笔记本成无线热点, 制作"开启无线热点工具,这个小工具实际上是用java来执行cmd命令来完成操作,当然也可以反射jar里边的字节码文件. 使 ...
- java小程序_Java小程序
java小程序 An applet is a special kind of Java program that runs in a Java enabled browser. This is the ...
- dw网页插入java小程序_DW网页设计100例35:构建Java插入模块
Java 是一种程序设计语言, Java applet ( Java 小程序)是在 Java 的基础上演变而成的.能够嵌入在网页中的.可以执行一定小任务的应用程序. 20060407140110aa1 ...
- dw网页插入java小程序_DW网页设计35:构建Java插入模块
Java 是一种程序设计语言, Java applet ( Java 小程序)是在 Java 的基础上演变而成的.能够嵌入在网页中的.可以执行一定小任务的应用程序. 效果说明建立文件,以 Java 计 ...
- java小程序源代码,详细说明
零基础的小白,如何学好Java?要多动手实践学习Java就像学习数学一样,在懂得理论知识后,一定要实践.学习Java不能搭便车,有些时候,句子和语法看起来很简单,但是亲自实践起来却总有自己不知道的知识 ...
- java程序获取外部java程序的控件,将 Java 小程序迁移到 Microsoft J# 浏览器控件-JSP教程,Java技巧及代码...
visual j# .net 小组 microsoft corporation 摘要:通过 microsoft j# 浏览器控件,开发人员可以将所编写的在 java 虚拟机上运行的 java 小程序迁 ...
最新文章
- 【HDU】4706 Children's Day(模拟)
- 怎么打断点_搞笑段子: 有次相亲, 双方父母都在, 我坐下就给自己点了支烟
- 【思维导图】利用LSTM(长短期记忆网络)来处理脑电数据
- Linux01-企业核心技术之逻辑卷LVM原理深入讲解35
- mysql avg 时间_MySQL或Rails在特定日期范围内每天获得AVG的最佳方式
- 【TypeScript】do...while 循环
- swiper怎么在HTML引入JS文件,Swiper.js插件超简单实现轮播图
- linux学习项目,[ Linux运维学习 ] 路径及实战项目合集
- eovs实训报告总结心得_实训总结与心得体会3篇_心得体会
- CCS3的过渡、变换、动画以及响应式布局、弹性布局
- 网页滚动条上下滚动固定元素左右不固定之sticky
- mysql知识点汇总
- NVIDIA Parallel Nsight
- java modbus通讯协议_Modbus通 讯 协 议
- vc运行库各版本下载
- 那些年我们一起上过的黑客网站
- VB6.0超级模块-内存操作篇-含特征码搜索和HOOK跳转构造
- android7.1.2 xposed,安卓7.1 xposed框架
- python 构建和解析邮件
- Python+Vue计算机毕业设计酒店管理系统(前台后台)i2agu(源码+程序+LW+部署)