Java如何按16进制发送和接收TCP指令
作者:qq_38310536
这篇文章主要介绍了Java如何按16进制发送和接收TCP指令问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Java按16进制发送和接收TCP指令
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import org.apache.http.util.TextUtils;
public class TCPSocket{
public static void main(String args[]){
String cmdInfor="00 00 00 00 00 06 01 01 00 01 00 20";
send(cmdInfor);
}
public static String send(String cmdInfor){
String strReturn = null;
try {
//要连接的服务端IP地址
String host = "192.168.1.2";
//要连接的服务端对应的监听端口
int port = 502;
//将十六进制的字符串转换成字节数组
byte[] cmdInfor2 = hexStrToBinaryStr(cmdInfor);
//1.建立客户端socket连接,指定服务器位置及端口
Socket clientSocket =new Socket(host,port);
//2.得到socket读写流
OutputStream os=clientSocket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//输入流
InputStream is=clientSocket.getInputStream();
//3.利用流按照一定的操作,对socket进行读写操作
os.write(cmdInfor2);
os.flush();
clientSocket.shutdownOutput();
//接收服务器的响应
int line = 0;
byte[] buf = new byte[is.available()];
//接收收到的数据
while((line=is.read(buf))!=-1){
//将字节数组转换成十六进制的字符串
strReturn= BinaryToHexString(buf);
}
//4.关闭资源
is.close();
pw.close();
os.close();
clientSocket.close();
}catch (Exception e){
e.printStackTrace();
}
return strReturn;
}
/**
* 将十六进制的字符串转换成字节数组
*
* @param hexString
* @return
*/
public static byte[] hexStrToBinaryStr(String hexString) {
if (TextUtils.isEmpty(hexString)) {
return null;
}
hexString = hexString.replaceAll(" ", "");
int len = hexString.length();
int index = 0;
byte[] bytes = new byte[len / 2];
while (index < len) {
String sub = hexString.substring(index, index + 2);
bytes[index/2] = (byte)Integer.parseInt(sub,16);
index += 2;
}
return bytes;
}
/**
* 将字节数组转换成十六进制的字符串
*
* @return
*/
public static String BinaryToHexString(byte[] bytes) {
String hexStr = "0123456789ABCDEF";
String result = "";
String hex = "";
for (byte b : bytes) {
hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4));
hex += String.valueOf(hexStr.charAt(b & 0x0F));
result += hex + " ";
}
return result;
}
}Java使用TCP协议发送和接收数据
TCP
TCP是面向连接的可靠传输协议
Java使用TCP发送数据代码
三步:
- (1) 创建客户端的Socket对象Socket
- (2) 获取输出流,写数据
- (3) 释放资源
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TCPTest01 {
public static void main(String[] args) throws IOException {
Socket s = new Socket(InetAddress.getByName("uos-pc"), 10086);
OutputStream os = s.getOutputStream();
os.write("FTP".getBytes());
s.close();
}
}Java使用TCP接收数据代码
四步
- (1) 创建服务器Socket对象ServerSocket
- (2) 监听客户端链接,返回Socket对象
- (3) 获取输入流,读数据,控制台显示
- (4) 释放资源
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPTest02 {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10086);
Socket s = ss.accept();
InputStream is = s.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
String data = new String(b, 0, len);
System.out.println(data);
s.close();
ss.close();
}
}执行
分别启动TCPTest01.java和TCPTest02.java,可在控制台看到输出TCP。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
