> Java > java지도 시간 > 본문

Java 포트 청취 구현 코드

不言
풀어 주다: 2018-09-10 14:59:19
원래의
4027명이 탐색했습니다.

이 기사는 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();
	}

}
로그인 후 복사

관련 권장 사항:

기본 및 기본이 아닌 포트의 동적 모니터링/정적 모니터링 실험 요약

# 🎜🎜#

소켓이 포트에서 수신 대기 중일 때 하나의 클라이언트만 해당 포트에 데이터를 보낼 수 있는 문제를 해결하는 방법

위 내용은 Java 포트 청취 구현 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿