做个笔记
最简单的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();
}
}
}