




免费预览已结束,剩余105页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
package com.tontion.datasend;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.color.ColorSpace;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseWheelEvent;import java.awt.image.BufferedImage;import java.awt.image.ColorConvertOp;import java.io.BufferedReader;import java.io.ByteArrayInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.ObjectInputStream;import java.io.RandomAccessFile;import .DatagramSocket;import .InetAddress;import .InetSocketAddress;import .Socket;import .SocketException;import .UnknownHostException;import java.util.ArrayList;import java.util.Hashtable;import java.util.List;import java.util.Random;import java.util.Vector;import javax.imageio.ImageIO;import com.tontion.tools.LoadFileInfo;import com.tontion.tools.XtecssVo;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;/* * UDP传输主程序,可以发送文字信息和发送文件 * author jack * date 2011-02-17 */public class MainUDP public static final long IPMSG_COMMASK = 0x00000fffL; / 命令运算标志public static final long IPMSG_OPTMASK = 0xfffff000L; / 操作运算标志public static final long IPMSG_NOOPERATION = 0x00000200L; / 复位清零标志public static final long IPMSG_MSG = 0x00000201L; / 发送文字信息命令public static final long IPMSG_LOGIN = 0x00000202L; / 发送登录信息命令public static final long IPMSG_FILE_BEGIN = 0x00000203L; / 开始发送文件提示命令public static final long IPMSG_FILE_CONTINUE = 0x00000204L;/ 请求继续传送文件命令public static final long IPMSG_FILE_CONTENT = 0x00000205L; / 发送内容为文件包命令public static final long IPMSG_FILE_RESEND = 0x00000206L; / 请求重发文件包命令public static final long IPMSG_FILE_EXIT = 0x00000207L; / 文件接收完成命令public static final long IPMSG_LOGOUT = 0x00000208L; / 用户退出提示命令public static final long IPMSG_USERLIST = 0x00000209L; / 发送在线用户列表命令public static final long IPMSG_INFORMREREGPORT = 0x0000020AL; / 通知重新注册端口命令public static final long IPMSG_QUERYDIR = 0x0000020BL; / 获取目录命令public static final long IPMSG_DEMANDSENDFILE = 0x0000020CL; / 获取文件命令public static final long IPMSG_ONLINE = 0x0000020DL; / 在线命令public static final long IPMSG_REONLINE = 0x0000020EL; / 在线应答命令public static final long IPMSG_RELOGIN = 0x0000020FL; / 要求登录命令public static final long IPMSG_PENETRATE = 0x00000210L; / 穿透NAT命令public static final long IPMSG_DEMANDPENETRATE = 0x00000211L; / 请求通知指定用户发送穿透NAT命令public static final long IPMSG_INFORMPENETRATE = 0x00000212L; / 通知向指定用户发送穿透NAT命令public static final long IPMSG_INFORMREGPORT = 0x00000213L; / 通知注册端口命令public static final long IPMSG_REGPORT = 0x00000214L; / 注册端口命令public static final long IPMSG_PORTMAPPING = 0x00000215L; / 请求穿透所有端口命令public static final long IPMSG_NOCOMMAND = 0x00000216L; / 空命令public static final long IPMSG_MAPOTHERPORT = 0x00000217L; / 空命令public static final long IPMSG_GETUSERLISTINFO = 0x00000218L; / 获取用户列表通知public static final long IPMSG_CONTINUEREQUSERLIST = 0x00000219L; / 请求继续发送用户列表public static final long IPMSG_CONTINUEUSERLIST = 0x0000021AL; / 继续发送用户列表public static final long IPMSG_LOGOUTINFO = 0x0000021BL; / 服务器发送特定用户已经退出通知public static final long IPMSG_REMOTEVIEW = 0x0000021CL; / 远程操作命令public static final long IPMSG_REMOTEVIEWEND = 0x0000021DL; / 远程操作结束public static final long IPMSG_MOUSEKEY = 0x0000021EL; / 鼠标键盘操作/ public static final int IPMSG_NATMAXPACK = 32600; / 局域网内包大小public static final int IPMSG_NATMAXPACK = 2000; / 局域网包大小/public static final int IPMSG_NATMAXPACK = 1350; / 局域网包大小public static final int IPMSG_NATSTOPPACKNUM = 20; / 局域网内暂停包大小/public static final int IPMSG_NATSTOPPACKNUM = 20; / 局域网内暂停包大小public static final int IPMSG_INTERMAXPACK = 512;/ internet网包大小public static final int IPMSG_INTERSTOPPACKNUM = 20; / internet网暂停包大小public static final int IPMSG_MAXSENDFILECOUNT = 5;/ 同时发送的最大文件数public static final int IPMSG_MAXSENDPLFILECOUNT = 2;/ 同时发送的最大人员定位文件数private long serial = 0; / 消息序列号private int clientPort = 9102; / 本地端口private String clientIP = null; / 本地远程IP地址private int serverPort = 0; / 对方消息接收端口private int serverSocketPort = 0; / 服务器Socket端口private String serverIP = null; / 接收方IP地址private String userNo = none; / 用户编号private Hashtable sendFileHs = new Hashtable(); / 发送文件集合private Hashtable recvFileHs = new Hashtable(); / 接收文件集合private UDPMainFrame mainFrame = null;/ 文件传输暂停包数public long startTime = 0; / 文件发送开始时间public long endTime = 0; / 文件发送结束时间private DatagramSocket sendDs = null;/ 发送数据包的套接字private DatagramSocket baseDs = null;/ 基础数据包的套接字private int sendPortCount = 1;/ 发送端口数量private Hashtable loginUsers = new Hashtable();/ 登录用户/ private Hashtable regPortListens = new Hashtable();private boolean loginFlag = false;/ 登录标志private boolean logining = false; / 正在登录private boolean userListOK = false; / 获取用户列表完成标志private long lastPkgNo = 0l;/ 最后包编号private long onlineTime = 0l; / 在线验证时间private String sendFiles = sendFiles; / 发送缓存目录private String recFiles = recFiles;/ 接收缓存目录private String enterpriseCode = ;/矿井编号private int nMaxUserListCount = 0;/用户列表数private int userListStatus = null;/用户列表状态private long lnGetUserListTime = 0;/获得用户列表时间private long onLiveTime = System.currentTimeMillis();/保活时间private BufferManage bufferManage = null;/内存管理类private Hashtable hsRemoteUser = new Hashtable();/远程用户private int nMaxRemoteCount = 3;/允许的远程连接的最大数long lnMaxRemoteTime = 8000;/远程协助抓屏持续时间long lnEndRemoteTime = 600000;/无操作时远程协助断开时间600秒private char hexDigits = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,a, b, c, d, e, f ;private Robot robot = null;/* * 构造函数 * param pClientPort 本地接收端口 * param pServerIP 服务器IP * param pServerPort 服务器端口 * param pUserNo 本地用户编号 * param pServerSocketPort 中心端处理udp端口请求的端口 * param pUserNo 产品序列号 * param runType 是否启动写udp运行标志文件的标志,0不启动,1启动 */public MainUDP(int pClientPort, String pServerIP, int pServerPort,int pServerSocketPort, String pUserNo, int runType,String pEnterpriseCode) this.clientPort = pClientPort;this.serverIP = pServerIP;this.serverPort = pServerPort;this.serverSocketPort = pServerSocketPort;this.userNo = pUserNo;this.enterpriseCode = pEnterpriseCode;/初始化内存管理类this.bufferManage = new BufferManage(2,MainUDP.IPMSG_MAXSENDFILECOUNT,2,MainUDP.IPMSG_INTERSTOPPACKNUM,MainUDP.IPMSG_INTERMAXPACK);/ 启动接收监听线程this.startRecv();/ 独立启动EXE,则启动UDP运行监听线程if (runType = 1) trynew UDPRunListen(this).start();catch(Exception ex)/System.exit(0);/ 启动登录线程this.loginServer();/* * 构造函数 * param pClientPort 本地接收端口 * param pServerIP 服务器IP * param pServerPort 服务器端口 * param pUserNo 本地用户编号 */public MainUDP(int pClientPort, String pServerIP, int pServerPort,String pUserNo) this.clientPort = pClientPort;this.serverIP = pServerIP;this.serverPort = pServerPort;this.userNo = pUserNo;/初始化内存管理类this.bufferManage = new BufferManage(2,MainUDP.IPMSG_MAXSENDFILECOUNT,2,MainUDP.IPMSG_INTERSTOPPACKNUM,MainUDP.IPMSG_INTERMAXPACK);this.startRecv();/* * 构造函数 * param pClientPort 本地接收端口 * param pServerPort 服务器端口 * param pUserNo 本地用户编号 */public MainUDP(int pClientPort, int pServerPort, String pUserNo) this.clientPort = pClientPort;this.serverPort = pServerPort;this.userNo = pUserNo;/初始化内存管理类this.bufferManage = new BufferManage(2,MainUDP.IPMSG_MAXSENDFILECOUNT,2,MainUDP.IPMSG_INTERSTOPPACKNUM,MainUDP.IPMSG_INTERMAXPACK);this.startRecv();/* * 构造函数 * param pClientPort 本地接收端口 * param pServerPort 服务器端口 * param pUserNo 本地用户编号 */public MainUDP(int pClientPort, int pServerPort, String pUserNo,UDPMainFrame mainFrame) this.clientPort = pClientPort;this.serverPort = pServerPort;this.userNo = pUserNo;this.mainFrame = mainFrame;/初始化内存管理类this.bufferManage = new BufferManage(2,MainUDP.IPMSG_MAXSENDFILECOUNT,2,MainUDP.IPMSG_INTERSTOPPACKNUM,MainUDP.IPMSG_INTERMAXPACK);this.startRecv();/* * 向服务器发送登录消息 */public void loginServer() / 初始化端口initSendDs();trynew LoginServerListen(this, null).start();catch(Exception ex)/System.exit(0);this.onlineTime = System.currentTimeMillis();/ 启动在线监视线程if (!.equals(serverIP) /System.out.println(=启动在线监视线程);trynew OnLineListen(this, null).start();catch(Exception ex)/System.exit(0);elsetry/启动用户在线状态维护线程new UserStatusListen(this).start();catch(Exception ex)/System.exit(0);try/ 启动文件传送监控线程new FileSendListen(this).start();/ 启动文件自动传输线程 new AutoSendFileListen(this).start();catch(Exception ex)/System.exit(0);/ sendMsg(serverIP, serverPort, 0L, + sendDs.length,/ MainUDP.IPMSG_LOGIN);/ mainFrame.setMessageRecord(userNo, 目的IP为 + serverIP + ;端口号为 +/ serverPort + n发送登录指令,内容为 + sendDs.length, 0);/* * 向服务器发送登录消息 * param strPassword 密码 */public int autoLoginServer(String password) if (serverSocketPort 0) Socket socket = new Socket();BufferedReader is = null;DataOutputStream os = null;try / System.out.println(向中心端(IP为 + this.serverIP + ;端口为/ + this.serverSocketPort + UDP端口);socket.connect(new InetSocketAddress(this.serverIP,this.serverSocketPort), 5000);socket.setSoTimeout(5000);os = new DataOutputStream(socket.getOutputStream();is = new BufferedReader(new InputStreamReader(socket.getInputStream();os.writeUTF(p;);String port = ;for (int i = 0; i 10; i+) try port = is.readLine();if (port != null & !.equals(port) / System.out.println(获取的端口是: + port);serverPort = Integer.parseInt(port);break; catch (Exception e) catch (Exception ex) /this.onlineTime = System.currentTimeMillis();/return -2; finally try if (os != null) os.close();if (is != null) is.close(); catch (IOException e) e.printStackTrace();/ 初始化端口initSendDs();trynew LoginServerListen(this, password).start();catch(Exception ex)/System.exit(0);this.onlineTime = System.currentTimeMillis();return 0;/* * 向服务器发送登录消息 * param strPassword 密码 */public void loginServer(String strPassword) / 初始化端口initSendDs();trynew LoginServerListen(this, strPassword).start();catch(Exception ex)/System.exit(0);this.onlineTime = System.currentTimeMillis();try/ 启动在线监视线程/ 启动在线监视线程if (!.equals(serverIP) new OnLineListen(this, strPassword).start();else/启动用户在线状态维护线程new UserStatusListen(this).start();/ 启动文件传送监控线程new FileSendListen(this).start();catch(Exception ex)/System.exit(0);/ sendMsg(serverIP, serverPort, 0L, + sendDs.length,/ MainUDP.IPMSG_LOGIN);/ mainFrame.setMessageRecord(userNo, 目的IP为 + serverIP + ;端口号为 +/ serverPort + n发送登录指令,内容为 + sendDs.length, 0);/* * 处理重新登录命令 * param tmppack 数据包 */public void doReLogin(IPMPack tmppack) / System.out.println(+收到 + tmppack.getUser() + 用户要求重登录命令);this.loginFlag = false;/* * 处理在线验证命令 * param tmppack 数据包 */public void doOnLine(IPMPack tmppack) / System.out.println(=发送回复 + tmppack.getHost() + : +/ tmppack.getSrcPort();/ 接收到的IP和端口号与用户列表中不一致,则要求重新登录String strSendUser = tmppack.getUser();Object sendUserInfo = (Object) this.loginUsers.get(strSendUser);/ 如果为空,表示未登录,则跳过if (sendUserInfo = null) / System.out.println(1在线验证用户 + strSendUser +/ 没有登录,在线验证忽略!);return;/如果没有准备好,则跳过if (Integer)sendUserInfo5).intValue() != 1)return;sendUserInfo10 = System.currentTimeMillis();/在线验证时间/ 如果发送方的IP和端口不一致,则要求重新登录int srcPort = (int) sendUserInfo3;int clientPort = (int) sendUserInfo4;/ System.out.println(tmppack.getUser= + tmppack.getUser()/ + ;tmppack.getHost()= + tmppack.getHost()/ + ;sendUserInfo1= + (String) sendUserInfo1/ + ;tmppack.getSrcPort()= + tmppack.getSrcPort()/ + ;srcPort0= + srcPort0);/ System.out.println(2在线验证tmppack.getUser= +/ tmppack.getUser()/ + ;tmppack.getHost()= + tmppack.getHost()/ + ;sendUserInfo1= + (String) sendUserInfo1/ + ;tmppack.getSrcPort()= + tmppack.getSrcPort()/ + ;srcPort0= + srcPort0/ + ;sendUserInfo2= + sendUserInfo2/ + ;clientPort0= + clientPort0);/ 如果是第一次验证,则记录第一验证时间if (sendUserInfo8 = null) sendUserInfo8 = System.currentTimeMillis();if (tmppack.getHost().equals(String) sendUserInfo1) / 如果当前时间是在第一次验证后的40秒内,表示正常if (System.currentTimeMillis()- (Long) sendUserInfo8).longValue() = 3) / 验证产品序列号XtecssVo userInfoVo = LoadFileInfo.getXtecssVo(userInfo);if (userInfoVo != null) String productSerialNo = userInfoVo.getValue(productSerialNo);/ System.out.println(=productSerialNo= +/ productSerialNo + ;commandParameters0= +/ commandParameters0);/ 如果产品序列号不对,则直接返回if (!productSerialNo.equals(commandParameters0) this.sendMsg(tmppack.getUser(), 0L, userNo + 产品序列号不正确!,MainUDP.IPMSG_MSG);return;/ 验证UDP密码XtecssVo userRunConfig = LoadFileInfo.getXtecssVo(userRunConfig);if (userRunConfig != null) String udpVerifyPassword = userRunConfig.getValue(UDPverifyPassword);/ System.out.pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海运费课件教学课件
- 2024-2025学年云南省昆明市五华区下学期学业质量监测九年级数学试题卷
- 河北省承德市隆化县2026届九年级化学第一学期期中经典试题含解析
- 个人的简单借款合同范本与个人短期借款合同3篇
- 设备安全培训心得感悟课件
- 押题宝典教师招聘之《小学教师招聘》试题含答案详解(研优卷)
- 教师招聘之《幼儿教师招聘》考试押题卷含答案详解(模拟题)
- 设备使用及维护培训课件
- 建设工程项目施工保证协议书7篇
- 2026届重庆市七中学九年级化学第一学期期中学业水平测试模拟试题含解析
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- 2#横洞进正洞挑顶方案
- 智能变电站设备巡视
- UPS基础知识及竞争分析课件
- 2021《改革开放史》课件全文
- 塑料厂安全风险分级管控清单
- 心脏射频消融术护理常规ppt
- 建筑工程经济与管理完整版课件全套ppt教程(最新)
- 新教材教科版五年级上册科学全册课时练(课后作业设计)
- 锐捷兵法-售前学员版课件
- SLZ 552-2012 用水指标评价导则
评论
0/150
提交评论