python如何实现如下接口?

在做服务器测试时遇到这个问题,原本这段代码在web项目中,由于不方便,打算提出来写成python脚本直接放在服务器上,运行脚本即可发送测试数据到服务端,但是java的buffer与byte这种序列化方式在python中怎么实现呢?查找了很多资料也没能搞明白。
下面的java的接口代码:
/**

 * 向某主机发送一段文本,并将主机的返回作为文本返回
 * 
 * @param host
 *            主机
 * @param port
 *            端口
 * @param text
 *            发送的内容
 * @return 主机返回的文本
 */
public static String sendText(String host, int port, String text) {
    StringBuilder sb = new StringBuilder();
    int len = text.getBytes().length + Integer.SIZE / Byte.SIZE;
    ByteBuffer bb = ByteBuffer.allocate(len);
    bb.putInt(text.getBytes().length);
    bb.put(text.getBytes());
    bb.flip();
    
    // 读取指定长度的字节数
    byte[] bytes = new byte[len];
    bb.get(bytes);
    if (isValidIP(host)) {
        sendip(host, port, bytes, Lang.ops(sb), 60*1000);
    } else {
        send(host, port, bytes, Lang.ops(sb), 60*1000);
    }
    return sb.toString();
}
阅读 2.8k
1 个回答

题主给的代码不全,想要把代码逻辑用python重写一遍不现实,但在我看来这段Java代码写得也是有点问题的,前半部分像是要用nio,可后面又把buffer转成了byte,也不知道后面的send方法是用socket还是nio。
但是要用Python实现题主的代码功能还是很简单的。

向某主机发送一段文本,并将主机的返回作为文本返回

# -*- coding: utf-8 -*-
from socket import *


def send(host, port, message):
    client = socket(AF_INET, SOCK_STREAM)
    client.connect((host, port))

    client.sendto(bytes(message, encoding='utf-8'), (host, port))
    b_result, addr = client.recvfrom(2048)

    client.close()

    return b_result.decode()
    pass


if __name__ == '__main__':
    result = send('127.0.0.1', 12000, 'hello')
    print(result)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题