欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Java

Java端口监听的实现代码

程序员文章站 2022-04-01 09:38:36
...
本篇文章给大家带来的内容是关于Java端口监听的实现代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
public class test {
	public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
		// 客户端

		SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
		try {
			PrintStream out = new PrintStream("D://Systemout" + format.format(new Date()) + ".txt");
			System.setOut(out);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		// System.out.println("aaa");
		// 1、创建客户端Socket,指定服务器地址和端口
		ServerSocket serverSocket = new ServerSocket(7080);
		while(true){	
		Socket socket = serverSocket.accept();
		// 2、获取输出流,向服务器端发送信息
		/*
		 * Scanner scanner =new Scanner(socket.getInputStream());//创建一个客户端的输入流
		 * (用于在服务端显示)
		 * 
		 * String msg; while(scanner.hasNextLine()){//获取客户端发送的信息 msg=scanner.nextLine();
		 * System.out.println(msg); }
		 */
		BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
		DataInputStream dis = new DataInputStream(bis);
		byte[] bytes = new byte[1]; // 一次读取一个byte
		String ret = "";
		while (dis.read(bytes) != -1) {
			ret += bytesToHexString(bytes) + " ";
			if (dis.available() == 0) { // 一个请求
				System.out.print(ret + ' ');
			}
		}
	//	String ret = "47 38 30 31 33 35 36 32 fe 0d ff 06 6e ff 53 51 55 65 78 67 19 21 14 c7 cb fe 0c 01 07 e2 09 06 10 01 04 01 2f 01 0a 27 10 00 3c 1c 59 15 1d";
		System.out.println("---");
		String ret1 = ret.substring(0, ret.length());
		System.out.println("有效字符串为:" + ret1);
		String ret2 = ret1.substring(0, 24);
		System.out.println("注册码:" + ret2);
		String ret3 = ret1.substring(24, 75);
		System.out.println("设备码:" + ret3);
		String ret4 = ret1.substring(75, ret1.length());
		System.out.println("数据:" + ret4);

		String zcm = ret2.substring(0, ret2.length()).replaceAll(" ", "");

		String ss1 = ret4.substring(9, 30).replaceAll(" ", "");
		String ss2 = ret4.substring(30, 54).replaceAll(" ", "");
		String ss3 = ret4.substring(54, 60).replaceAll(" ", "");
		String ss4 = ret4.substring(60, 65).replaceAll(" ", "");

		int year = Integer.parseInt(ss1.substring(0, 4).replaceAll("^0[x|X]", ""), 16);
		System.out.println("年份:" + year);

		int month = Integer.parseInt(ss1.substring(4, 6).replaceAll("^0[x|X]", ""), 16);
		System.out.println("月:" + month);

		int day = Integer.parseInt(ss1.substring(6, 8).replaceAll("^0[x|X]", ""), 16);
		System.out.println("日:" + day);

		int hour = Integer.parseInt(ss1.substring(8, 10).replaceAll("^0[x|X]", ""), 16);
		System.out.println("时:" + hour);

		int min = Integer.parseInt(ss1.substring(10, 12).replaceAll("^0[x|X]", ""), 16);
		System.out.println("分:" + min);

		int sec = Integer.parseInt(ss1.substring(12, 14).replaceAll("^0[x|X]", ""), 16);
		System.out.println("秒:" + sec);

		int temp = Integer.parseInt(ss2.substring(0, 4).replaceAll("^0[x|X]", ""), 16);
		System.out.println("温度:" + temp);

		int sw = Integer.parseInt(ss2.substring(4, 8).replaceAll("^0[x|X]", ""), 16);
		System.out.println("水位:" + sw);

		// 字符串类型的日期与时间直接存储到数据库
		String date = String.valueOf(year) + "-" + String.valueOf(month) + "-" + String.valueOf(day);
		System.out.println(date);
		String time = String.valueOf(hour) + "时" + String.valueOf(min) + "分" + String.valueOf(sec) + "秒";
		System.out.println(time);

		String driverName = "com.mysql.jdbc.Driver";
		String dbURL = "jdbc:mysql://localhost:3306/dire";
		String userName = "root";
		String userPwd = "sa";

		Class.forName(driverName);
		Connection con = DriverManager.getConnection(dbURL, userName, userPwd);
		System.out.println("连接数据库成功");
		Statement stat = con.createStatement();
		String sql = "INSERT INTO shuju(注册码,日期,时间,温度,水位) VALUES(?,?,?,?,?)";

		PreparedStatement pstmt;
		try {
			pstmt = (PreparedStatement) con.prepareStatement(sql);
			pstmt.setObject(1, zcm);
			pstmt.setObject(2, date);
			pstmt.setObject(3, time);
			pstmt.setObject(4, temp);
			pstmt.setObject(5, sw);
			pstmt.executeUpdate();
			pstmt.close();
			con.close();
		} catch (SQLException e) {

			e.printStackTrace();

		}

		System.out.println("成功");
	}
	}
	public static String bytesToHexString(byte[] src) {
		StringBuilder stringBuilder = new StringBuilder("");
		if (src == null || src.length <= 0) {
			return null;
		}
		for (int i = 0; i < src.length; i++) {
			int v = src[i] & 0xFF;
			String hv = Integer.toHexString(v);
			if (hv.length() < 2) {
				stringBuilder.append(0);
			}
			stringBuilder.append(hv);
		}
		return stringBuilder.toString();
	}

}

相关推荐:

默认及非默认端口的动态监听/静态监听实验汇总

怎么解决socket在监听端口时,只有一个客户端能往端口下发数据

以上就是Java端口监听的实现代码的详细内容,更多请关注其它相关文章!

相关标签: Java端口监听