首页 > 编程语言 >Android tcp、okhttp请求&&python tcp&&a bytes-like object is required, not ‘str‘

Android tcp、okhttp请求&&python tcp&&a bytes-like object is required, not ‘str‘

时间:2023-05-25 10:36:07浏览次数:50  
标签:socket required tcp server && print new data Log


更多内容欢迎来到我的新博客blog.devilwst.top

更多内容欢迎来到我的新博客blog.devilwst.top


首先声明一下,本文部分代码来自于博客

Android

public static void GetByHttpURL(final String url) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String resultData="";
                    URL connUrl=new URL(url);
                    HttpURLConnection urlConn= (HttpURLConnection)connUrl.openConnection ();
                    InputStreamReader in=new InputStreamReader(urlConn.getInputStream());
                    BufferedReader buffer=new BufferedReader(in);
                    String inputLine=null;
                    while (((inputLine=buffer.readLine()) !=null)) {
                        resultData+=inputLine+"\n";
                    }
                    in.close();
                    urlConn.disconnect();
                    Log.d(TAG, "GetByHttpURL "+resultData);
                } catch (Exception e) {
                    Log.d(TAG, "GetByHttpURL error "+e.getMessage());
                    e.printStackTrace();
                }
            }
        }).start();
    }

    public static void GetByOkHttp(String url) {
        try {
            OkHttpClient okHttpClient = new OkHttpClient();
            final Request request = new Request.Builder()
                    .url(url)
                    .get()//默认就是GET请求,可以不写
                    .build();
            Call call = okHttpClient.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    Log.d(TAG, "onFailure: ");
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    Log.d(TAG, "GetByOkHttp onResponse: " + response.body().string());
                }
            });
        } catch (Exception e) {
            Log.d(TAG, "GetByOkHttp error "+e.getMessage());
            e.printStackTrace();
        }
    }


    public static void DoTcp() throws IOException, InterruptedException {
        System.out.println("xiaosheng tcp:");
        Log.d(TAG, "DoTcp bind tcp");
        Socket socket = new Socket("192.168.3.5", 5000);
        socket.setSoTimeout(10000);
        //发送数据给服务端
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello,server".getBytes("UTF-8"));
        Thread.sleep(2000);
        socket.shutdownOutput();
        //读取数据
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = br.readLine();
        //打印读取到的数据
        Log.d(TAG, "tcp server recv:" + line);
        br.close();
        socket.close();

    }

然后在Oncreate里面添加如下代码,创建线程,激发一下

new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    try {
                        Log.d(TAG, "start send http");
                        GetByOkHttp("http://missking.cc/");
                        GetByHttpURL("http://10.ip138.com");
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {

                try {
                    while(true){
                        DoTcp();
                        Thread.sleep(3000);
                    }
                } catch (InterruptedException e) {
                    Log.d(TAG, "DoTcp error: " + e.getMessage());
                    e.printStackTrace();
                } catch (IOException e) {
                    Log.d(TAG, "DoTcp error: " + e.getMessage());
                    e.printStackTrace();
                }
            }
        }).start();
    }

python tcp server demo

server

def server():
    '''
    Server服务端程序
    '''
    # 如果放在服务器的话,填写云主机的内网IP 不是公网IP
    server_ip = '0.0.0.0'  # 绑定内网IP
    server_port = 5000        # 监听端口

    # 1.先调用socket.socket()创建socket套接字
    # socket.AF_INET 表示ipv4
    # SOCK_STREAM 表示使用tcp链接

    # 2.bind()绑定监听的IP和端口
    # 3.listen()开始监听
    # 4.accept()接受客户端发来的消息

    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((server_ip, server_port))
        s.listen()
        print("ready to connect:")

        while True:
            conn, client_ip = s.accept()
            with conn:
                print('Connected by', client_ip)
                while True:
                    client_data = conn.recv(1024)
                    print("client:", client_data.decode())
                    if not client_data:
                        print('client data is null')
                        break
                    response_data = "hello client"+str(time.time())
                    response_data_byte = bytes(
                    response_data, encoding='utf-8')
                    conn.send(response_data_byte)


server()

client

# client1
import socket
import time

def send_data(data):
    server_ip = '127.0.0.1'  #服务器的IP
    server_port = 5000     #服务器监听的端口

    while True:
        try:
            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
                s.connect((server_ip, server_port))
                s.send(data)
                data = s.recv(1024)
                print('Received:', data.decode())
        except Exception as e:
            print('connect server fail(server ip %s,port %s):' % (server_ip, server_port))
            print(e)
            time.sleep(10)
            continue
        # return
    
send_data(bytes("hello server".encode("utf-8")))

client2

# client2
from socket import *

def tcpClient():
    HOST = 'localhost' #  or 'localhost'
    PORT = 5000
    BUFSIZ = 1024
    ADDR=(HOST,PORT)

    tcpCliSock = socket(AF_INET,SOCK_STREAM)
    try:
            tcpCliSock.connect(ADDR)
    except Exception as e:
            print("err:--",e)

    while True:
        data = "hello server"+str(time.time())
        #print('data=',data);
        if not data:
            break
        tcpCliSock.send(data.encode())
        data = tcpCliSock.recv(BUFSIZ).decode()
        if not data:
            break
        print("server:",data)
        time.sleep(1)
    tcpCliSock.close()


tcpClient()

补充

1.加权限

在AndroidManifest.xml里要加入网络权限

<uses-permission android:name="android.permission.INTERNET" />

Android tcp、okhttp请求&&python tcp&&a bytes-like object is required, not ‘str‘_tcp

2.导包

Android tcp、okhttp请求&&python tcp&&a bytes-like object is required, not ‘str‘_IP_02

implementation("com.squareup.okhttp3:okhttp:4.9.1")

Android tcp、okhttp请求&&python tcp&&a bytes-like object is required, not ‘str‘_android_03

关于报错

Android tcp、okhttp请求&&python tcp&&a bytes-like object is required, not ‘str‘_逆向_04


这一句,一看是Client端报错

这个问题呢一般出现在数据的解码,或者encode

Android tcp、okhttp请求&&python tcp&&a bytes-like object is required, not ‘str‘_逆向_05


这个问题很容易让我们误会,让我们以为这是这一句错误,其实不是

s.connect((server_ip, server_port))
# 解决方法
send_data(bytes("hello server".encode("utf-8")))


标签:socket,required,tcp,server,&&,print,new,data,Log
From: https://blog.51cto.com/u_16128190/6345294

相关文章

  • MPTCP(六):MPTCP测试
    MPTCP测试1.注意事项测试主机已替换支持MPTCPv1的内核,并且已使能MPTCP,本次测试中使用的内核版本均为5.18.19测试主机中确保已经正确配置了iproute2和mptcpd,参考文档如下:《MPTCP路径管理工具ip-mptcp》《mptcpd编译及安装》测试用的server主机可以只有一个WAN口,但......
  • 【Kafka从入门到成神系列 四】Kafka 消息丢失及 TCP 管理
    ......
  • 【Kafka从入门到成神系列 八】Kafka 多线程消费者及TCP连接
    ......
  • TCP/IP 压包数据问题。
    client中定义data_len=recv_packet.head_union.head.total_length-NET_PACKET_HEAD_LEN;net_pack.pdata=newchar[data_len];用memcpy(net_pack.p_data,recv_packet.p_data,data_len)。打印recv_packet.p_data得到的值是正确回传的,但是通过memcpy复制到net_pack.p_data的......
  • ts常用语法笔记(Omit,Pick,Partial,Required)
    1.Omit【某个类型中去除某些项后的新的数据类型】-需要两个参数:Omit<type,string>,第一个参数为要继承的type类型,第二个参数为想要去除的key的字符串,存在多个时用|分隔源码:typeOmit<T,Kextendskeyofany>=Pick<T,Exclude<keyofT,K>>e.g.exporttypeAsyncBu......
  • 浅谈TCP协议的发生过程
    1.TCP协议1.1TCP协议的性质面向连接的、可靠的、基于字节流至于为什么面向连接,又为什么可靠,基于字节流的,等后面便可知道.1.2TCP协议栈收发数据的四个阶段创建套接字连接服务器收发数据断开服务器连接,删除套接字1.3TCP头部格式2.创建套接字2.1首先理解......
  • 什么是Socket连接?与TCP连接有什么关系?
    什么是Socket连接?它与TCP连接有什么关系?计算机网络是我们日常生活中不可或缺的一部分,而Socket连接则是网络通信中必不可少的一种机制。Socket是应用层与TCP/IP协议簇通信的中间软件抽象层,它是一组接口。Socket连接是计算机网络中的一种通信机制,它允许两个程序在不同计算机上通过......
  • 二:用电信号传输TCP/IP数据-3.2-ACK号的管理
    上一节讲了数据收发的大概过程,实际上网络的错误检测和补偿机制非常复杂,这一节讲三个关键点。一、返回ACK号的等待时间返回ACK号的等待时间叫超时时间。当网络传输繁忙时ACK号的返回会变慢,这时就要将等待时间设置得长一点,不然可能已经重传了,ACK号才到达。这样的重传是多余的,虽然......
  • tcpdump的简单使用
    Tcpdump是一个常用的网络数据包抓取工具,可以在Linux/Unix和其他类Unix操作系统中使用。它可以嗅探网络接口上的数据包,并将它们写入文件或输出到屏幕上。以下是tcpdump的基本使用教程:命令格式:tcpdump[选项][表达式]常用选项:-i:指定抓取数据包的网络接口。-n:以数......
  • Field userClient in com.demo.order.service.OrderService required a bean of type'
    在SpringCloud项目中使用Feign进行远程调用遇到的错误。原因是因为UserClient在com.demo.feign.clients包下面,而order-service的@EnableFeignClientd注解却在com.demo.order包下面,这两个不在同一个包下,无法扫描到UserClient。解决方法有两种1.指定Feign应该扫描的包@EnableFeig......