0

API のサンプル Java コードを Python スクリプトで動作するように調整しようとしています。Javaコードが機能し、Pythonでソケット接続を実行できることは知っていますが、Pythonで文字列を変換してxmlリクエストを正常に送信できるようにする方法がわかりません。構造体を使用する必要があると確信していますが、先週はまだそれを理解できていません。

また、最初にリクエストの長さを送信してからリクエストを送信する必要があることはかなり確信していますが、サーバープログラムで成功したリクエストを表示するために何も取得できませんでした。

public void connect(String host, int port) {
    try {
        setServerSocket(new Socket(host, port));

        setOutputStream(new DataOutputStream(getServerSocket().getOutputStream()));
        setInputStream(new DataInputStream(getServerSocket().getInputStream()));
        System.out.println("Connection established.");
    } catch (IOException e) {
        System.out.println("Unable to connect to the server.");
        System.exit(1);
    }
}

public void disconnect() {
    try {
        getOutputStream().close();
        getInputStream().close();
        getServerSocket().close();
    } catch (IOException e) {
        // do nothing, the program is closing
    }
}

/**
 * Sends the xml request to the server to be processed.
 * @param xml the request to send to the server
 * @return the response from the server
 */
public String sendRequest(String xml) {
    byte[] bytes = xml.getBytes();
    int size = bytes.length;
    try {
        getOutputStream().writeInt(size);
        getOutputStream().write(bytes);
        getOutputStream().flush();
        System.out.println("Request sent.");

        return listenMode();
    } catch (IOException e) {
        System.out.println("The connection to the server was lost.");
        return null;
    }
}
4

1 に答える 1

0

Python で文字列を送信しようとしている場合:

python2では、送信したい文字列がsock.send(s)どこにあり、. Python3 では、文字列をバイト文字列に変換する必要があります。バイト (s, 'utf-8') を使用して変換するか、b'abcd' のように文字列の前に ab を付けることができます。送信には、ソケット送信の通常の制限がすべてあることに注意してください。つまり、送信できる量だけを送信し、通過したバイト数のカウントを返します。ssocksocket.socket

sock以下は属性 を持つクラスのメソッドとして動作します。sock送信するソケット

def send_request(self, xml_string):
    send_string = struct.pack('i', len(xml_string)) + xml_string
    size = len(send_string)
    sent = 0
    while sent < size:
        try:
            sent += self.sock.send(send_string[sent:])
        except socket.error:
            print >> sys.stderr, "The connection to the server was lost."
            break
    else:
        print "Request sent."

import socketsysおよびstruct

于 2013-05-16T21:48:38.597 に答える