二. 服务器开发(未完待续)
环境: Myeclipse10, nb-iot模组, 公网ip (这里的公网ip是必须的, 腾讯云免费实验室了解下)
服务器搭建:
开发过程中不用nb模组, 没有公网, 可以先用java写一个udpclient进行本地测试
(去网上可以找到很多的网络助手等测试工具)
java版的udp服务器:
public class UDPService {
private final static int PORT = 53;
public static void main(String[] args) {
System.out.println("ServiceLog: listening......");
try (DatagramSocket socket = new DatagramSocket(PORT)) {
while (true) {
try {
DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
socket.receive(request); //获取发送端dp
String daytime = new Date().toString(); //系统时间
byte[] data = daytime.getBytes("ASCII");
String data2=new String(request.getData(),0,request.getLength()); //拼接字符串, 发送值
DatagramPacket response = new DatagramPacket(data, data.length, request.getAddress(), request.getPort());
socket.send(response); //发送返回值
System.out.println("ServiceLog:"+daytime + " " + request.getAddress()+"\n data:"+data2);
if(data2.equals("hello"))
System.out.println("i'm full!!!!");
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端测试代码很简单:
public class UDPClient {
public static void main(String[] args) throws Exception {
//数据包套接字:相当于码头,专门处理通信数据及进行数据转发设置的
DatagramSocket ds=new DatagramSocket();
String message="Hello Java World!";
//数据报包:类似于集装箱,用来存储所有的数据信息
DatagramPacket dp=new DatagramPacket(
message.getBytes(), //数据都是已字节数据进行发送的,因此需要将数据进行转换
message.length(), //发送数据的长度
InetAddress.getByName("127.0.0.1"), //发送数据的源ip地址
3000 //发送数据的端口号
);
//ds.receive();
ds.send(dp); //数据包通过码头DatagramSocket发送出去
ds.close(); //数据发送之后关闭通道,减少资源浪费
}
}