最简单的socket 与物流网的传感器交换数据

这篇博客展示了如何使用Java的SSLSocket和普通的Socket分别实现用户登录和设备登录,以与物流网的传感器进行数据交换。在用户登录部分,通过自定义X509TrustManager信任所有证书,实现了SSL连接。设备登录则模拟了传感器的登录过程,通过Socket发送特定的JSON格式数据来完成设备的注册和状态更新。
摘要由CSDN通过智能技术生成

做个笔记

最简单的socket 要与物流网的传感器交换数据

登录分为用户登录 与 设备登录

1、用户登录 (SSLSOCKET)
{“M”:“login”,“ID”:“xx1”,“K”:“xx2”}\n //json格式
最简单的SSLSocket 基本测试可用

public class net {

	public static void main(String[] args) throws InterruptedException, NoSuchAlgorithmException,
			KeyManagementException, UnknownHostException, IOException {

		X509TrustManager x509m = new X509TrustManager() {

			// 返回受信任的X509证书数组
			@Override
			public X509Certificate[] getAcceptedIssuers() {
				return null;
			}

			/*
			 * 该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。
			 * 在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。
			 */
			@Override
			public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			}

			/*
			 * 该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,
			 * 因此我们只需要执行默认的信任管理器的这个方法。JSSE中,默认的信任管理器类为TrustManager。
			 */
			@Override
			public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			}
		};

		SSLContext s = SSLContext.getInstance("SSL");
		s.init(null, new TrustManager[] { x509m }, new java.security.SecureRandom());
		SSLSocketFactory factory = s.getSocketFactory();

		SSLSocket socket = (SSLSocket) factory.createSocket("www.bigiot.net", 8585);//SSL登录地址

		OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

		System.out.println("内容为:" + in.readLine());// 服务器连接成功返回信息
		out.write(("{\"M\":\"login\",\"ID\":\"xxx\",\"K\":\"xxx\"}\n"));//json格式直接转义
		out.flush();
		System.out.println("内容为:" + in.readLine());// 服务器登录成功返回信息
		while (true) {

			System.out.println("内容为:" + in.readLine());// 接受服务器转发过来的信息

		}
   }
}

1、设备登录 模拟传感器(SOCKET)
{“M”:“checkin”,“ID”:“xx1”,“K”:“xx2”}\n //json格式

public class net {

	public static void main(String[] args) {
	 int key = 1;
		try {
			Socket socket = new Socket("www.bigiot.net", 8181);// 打开接口
		    OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());
		    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			while (key == 1) {
				Scanner input = new Scanner(System.in);
				System.out.println("输入命令, 按下回车键。");
				int ss = input.nextInt();
				
				if (socket.isConnected()) {
					switch (ss) {
					case 1:
						break;
					case 2:
	                    out.write(("{\"M\":\"checkin\",\"ID\":\"xxx\",\"K\":\"xxxxx\"}\n"));break;	
					case 3:
						out.write("{\"M\":\"status\"}\n");break;//检查状态		
					case 4:
						out.write("{\"M\":\"update\",\"ID\":\"xxxx\",\"V\":{\"17435\":\"35\"}}\n");break;
						//模拟传感器发送数据到服务器 这个数据被用户接收		
				case 5:
						key = 0;
						input.close();
						socket.close();// 关闭客户端
						System.out.println("关闭客户端");
						break;
					}
				}
				out.flush();
				System.out.println("内容为:" + in.readLine());
		}
		}
		catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值