java使用socket连接4G DTU设备发短信测试Demo
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketTest {
//在dtu测试工具里面用tcp测试正常,在java代码里面需要unicode转码 转码后默认加4个0 官方文档里面有
public static String toUnicode(String s) {
String as[] = new String[s.length()];
String s1 = "";
for (int i = 0; i < s.length(); i++) {
as[i] = Integer.toHexString(s.charAt(i) & 0xffff);
s1 = s1 + as[i];
}
return s1;
}
public static void main(String[] args) {
try{
//自己需要连接的dtu设备Ip加端口号
Socket socket = new Socket("192.168.xx.xxx", xxxxx);
if(socket.isConnected()){
System.out.println("连接中···请稍后");
OutputStream ops = socket.getOutputStream();
String content = toUnicode("微服务");
//DTU设备指令 加手机号,手机号后要有空格 接着换行符\n
String msg = new String("at+sms=176xxxxxxxx "+content+"0000"+"\n");
ops.write(msg.getBytes());
ops.flush();
System.out.println();
}
}
catch(UnknownHostException unknownHostException){
unknownHostException.printStackTrace();
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
}
这里提醒一下,如果你的文件读写没有达到预期目的,十之八九是因为你没有调用 flush() 或者 close() 方法。
另外,字符流类大多数都实现了 flush() 或者 close() 方法,只不过,它们调用的是 StreamEncoder
类的该方法。该类位于 sun.nio.cs 包下面,其源码在我们JDK中是没有的。
flush 与 Writer
该类 Writer 是一个抽象类,声明如下:
public abstract class Writer implements Appendable, Closeable, Flushable
细节请看JDK的API,或者Java的源码以及上面的 StreamEncoder 类源码。
今天就说到这里吧,本文主要借助Java IO中字节流与字符流的 flush() 方法,来说明学编程语言看源码和思考是很重要的。
总之,不管你使用哪种流(字符、字节、具有缓冲的流)技术,不妨调用一下 flush() 或者 close() 方法,防止数据无法写到输出流中。