将Python套接字代码转换为Java套接字代码

将Python套接字代码转换为Java套接字代码,java,python,sockets,io,Java,Python,Sockets,Io,给定此python脚本: import socket import sys import time buf0 = "03".decode('hex') buf1 = "0300".decode('hex') buf2 = "8028".decode('hex') package = buf0 + buf1 + buf2 HOST = "192.168.0.2" PORT = 22 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.s

给定此python脚本:

import socket
import sys
import time

buf0 = "03".decode('hex')
buf1 = "0300".decode('hex')
buf2 = "8028".decode('hex')
package = buf0 + buf1 + buf2
HOST = "192.168.0.2"
PORT = 22
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(3)
s.connect((HOST,PORT))
s.send(package)
rec = s.recv(1024)
s.close()
我需要对Java执行完全相同的操作,现在我正在使用此函数将hexstring转换为ascii字符串:

public static String convertHexToString(String hex) {

StringBuilder sb = new StringBuilder();
StringBuilder temp = new StringBuilder();
for (int i = 0; i < hex.length() - 1; i += 2) {

    // grab the hex in pairs
    String output = hex.substring(i, (i + 2));
    // convert hex to decimal
    int decimal = Integer.parseInt(output, 16);
    // convert the decimal to character
    sb.append((char) decimal);

    temp.append(decimal);
}

return sb.toString();
}

我重写了很多次,但总是没有好结果。

解决了发送字节数组的问题:

    String buff0 = "03";
    String buff1 = "0300";
    String buff2 = "8028";

    String packet = buff0 + buff1 + buff2;

    byte[] b = new BigInteger(packet,16).toByteArray();



    try {
        Socket socket = new Socket("192.168.0.2", 22);
        OutputStream socketOutputStream = socket.getOutputStream();
        socketOutputStream.write(b);
        InputStream socketInput = socket.getInputStream();
        System.out.println(socketInput.read());
        socket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

因此,我基本上得到十六进制字符串,将其转换为字节数组,并使用OutputStream发送它。

请在问题中包含Java套接字代码。看起来您有两个客户端套接字。使用套接字编程时,一端需要是绑定到端口的服务器,侦听并接受传入的连接,而另一端是只连接到主机的客户端。您必须将服务器套接字添加到Java代码或python代码中,或者两者都添加。@不,我将数据包发送到一个正在侦听连接的专有软件,我只需要开发客户端,现在python可以正常工作。我只需要帮助用Java翻译它。你有多确定你发送的是正确的东西或任何东西?PrintStream的print方法将基于默认平台编码对字符串进行编码,该编码可能与ASCII不兼容。@我不确定内容的有效性,这就是我寻求帮助的原因,python脚本工作正常,但我无法对Java脚本执行相同的操作。
    String buff0 = "03";
    String buff1 = "0300";
    String buff2 = "8028";

    String packet = buff0 + buff1 + buff2;

    byte[] b = new BigInteger(packet,16).toByteArray();



    try {
        Socket socket = new Socket("192.168.0.2", 22);
        OutputStream socketOutputStream = socket.getOutputStream();
        socketOutputStream.write(b);
        InputStream socketInput = socket.getInputStream();
        System.out.println(socketInput.read());
        socket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }