Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Python服务器打印ASCII而不是整数

Python服务器打印ASCII而不是整数
EN

Stack Overflow用户
提问于 2019-10-24 13:42:10
回答 1查看 181关注 0票数 1

我正在开发一个与Python服务器连接的Android应用程序。如果我从我的应用程序向python服务器发送一个名为角形的整数,服务器将输出ASCII字符而不是int。

代码语言:javascript
代码运行次数:0
复制
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = "127.0.0.1"
port = 1026

server_socket.bind((host, port))
server_socket.listen(3)

while True:
    client_socket, address = server_socket.accept()
    try:
        while True:
            data = client_socket.recv(1024)

            print(data.decode('utf-8'))

    finally:
        client_socket.close()

Java中的背景Android代码:

代码语言:javascript
代码运行次数:0
复制
class send extends AsyncTask<Void, Void , Void>{
        Socket s;
        PrintWriter pw;
        @Override

        protected Void doInBackground(Void...params){
            try{
                s = new Socket("10.0.2.2",1026);
                pw = new PrintWriter(s.getOutputStream());
                pw.write(Angle);
                pw.flush();
                pw.close();
                s.close();
            } catch (UnknownHostException e ){
                System.out.println("Fail");
                e.printStackTrace();
            } catch (IOException e){
                System.out.println("Fail");
                e.printStackTrace();
            }
            return null;
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-25 07:35:31

当您使用PrintWriter.write(int c)方法时,基本上将整数转换为字符,当服务器接收到输入时,它将接收文本。

来自PrintWriter类文档:

将对象的格式化表示打印到文本输出流。该类实现了在PrintStream中找到的所有打印方法。它不包含用于编写原始字节的方法,对于这些方法,程序应该使用未编码的字节流。

如果你想要更好的方法,就这么做。如果您想抛弃PrintWriter并向您的服务器发送一个纯整数,您可以这样做:

在您的Java

使用套接字的[OutputStream.write(字节b[])](https://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html#write(byte[]%29%29)方法并传递您的int。整数通常由4个字节组成。使用此方法时,将向python服务器发送4个字节。

代码语言:javascript
代码运行次数:0
复制
outputStream.write(ByteBuffer.allocate(4).putInt(yourIntHere).array());

服务器上的

代码语言:javascript
代码运行次数:0
复制
from struct import unpack

# put this in your socket while True loop
my_bytes = client_socket.recv(4)
my_int = unpack('>I', my_bytes)[0]

因此,基本上每次套接字客户端将整数作为4个字节发送时,服务器必须准确地接收4个字节,因为这是整数长度。最后,unpack()方法将字节转换为int。

不建议使用:如果仍然希望使用,请使用PrintWriter.write(字符串s)方法将int作为字符串发送(确保首先将int转换为String )。然后在python服务器上将str转换为int,只需使用

代码语言:javascript
代码运行次数:0
复制
int(data.decode('utf-8'))

虽然这不是向后端发送整数的最佳方法,但如果您不知道客户端发送了多少字节,它仍然有效,但非常容易出错。问题是,当您说recv(1024)时,您的服务器可能一次获得多个输入。在您的情况下,您在发送数据后立即关闭套接字,所以您将很好,但是如果您计划在不关闭连接的情况下来回发送数据,那么这将是一个问题。例如,当客户端发送作为文本编码的整数时,您的服务器可能会一次以字符串"102030"的形式获得多个输入,据推测,该输入必须被10, 20, 30分隔,而且您将无法获得预期的结果。您确实需要知道您的客户端发送了多少字节来防止这种情况发生。防止这种情况的另一件事是在它们前面加上一些字符,以便客户机发送"-10", "-20", "-30",服务器接收"-10-20-30",然后使用"-10-20-30".split('-') python函数对它们进行相应的解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58549490

复制
相关文章
单选按钮的用户体验设计
单选按钮是表单系统的一个基本元素。它们被使用在当存在互斥的两个或多个选项列表而用户必须选择其中一个时。换句话说,点选某个尚未选中的单选按钮,之前的选择就会恢复成未选中。 正确的使用单选按钮会非常好—
前朝楚水
2018/04/03
6.2K0
单选按钮的用户体验设计
AngularDart Material Design 单选按钮 顶
具有材料风格的单选按钮。 通常与material-radio-group一起使用。 选中后,无法通过用户操作取消选中相同的单选按钮。
南郭先生
2018/09/30
3.4K0
动态图表13|单选按钮
今天要跟大家分享的是动态图表13——单选按钮! 本例要讲的单元按钮与复选框的作用类似,只是选择的规则不一样。复选框可以同时选中一个以上,而单元格框则只能一次选中一个,所以在效果上,它与之前我们讲过的数
数据小磨坊
2018/04/10
1.8K0
动态图表13|单选按钮
python开发_tkinter_单选按钮
E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten
Hongten
2018/09/13
1.5K0
python开发_tkinter_单选按钮
Java GUI编程11—单选按钮:JRadioButton
单选按钮就是在给定的多个选择项中选择一个,并且只能选择一个。在Swing中可以使用JRadioButton完成一组单选按钮的操作,JRadioButton的常用方法如下表。
全栈程序员站长
2022/09/02
4.7K0
Java GUI编程11—单选按钮:JRadioButton
单选按钮的取消与选中 原
(adsbygoogle = window.adsbygoogle || []).push({});
tianyawhl
2019/04/04
3.6K0
Flutter中的单选按钮组件Radio
Flutter 中的单选按钮组件有两种。 1. Radio 单选按钮,一般用来表现一些简单的信息。 常用属性如下: (1). value 单选的值; (2). onChanged 选择改变触发的事件; (3). activeColor 选中时的颜色; (4). groupValue 多个按钮选择组的值; 2. RadioListTile 包含更多信息的单选项,提供多种配置信息的属性,可以表现更丰富的信息。 常用的属性如下: (1). value 单选的值; (2). onChanged 选择改变触发的
越陌度阡
2021/01/05
9.7K0
Flutter中的单选按钮组件Radio
Flat风格的Qml单选/复选按钮
使用Qml的RadioButton与CheckBox控件修改而成。 单选按钮 RadioButton代码 import QtQuick 2.0 import QtQuick.Controls 2.0
Qt君
2019/11/24
2.4K0
JavaSwing:JRadioButton-单选按钮开发详解
与ButtonGroup对象一起使用以创建一组按钮,其中一次只能选择一个按钮。 (创建一个ButtonGroup对象,并使用其add方法在该组中包括JRadioButton对象。)
JavaEdge
2020/05/27
2.2K0
iOS 单选按钮组--只能而且必选一个按钮
2、初始化并默认一个选项,这里用了4个button,实际可以采用2个,因为写一半才发现后面的汉字也要设置成可点的,就懒得改了,直接改成button了
Python疯子
2018/09/06
4.5K0
iOS 单选按钮组--只能而且必选一个按钮
JavaSwing_2.3: JRadioButton(单选按钮)「建议收藏」
本文链接: http://blog.csdn.net/xietansheng/article/details/74363379
全栈程序员站长
2022/09/02
5430
JavaSwing_2.3: JRadioButton(单选按钮)「建议收藏」
Python 图形化界面基础篇:添加单选按钮( Radiobutton )到 Tkinter 窗口
在 Python 图形化界面基础篇的这篇文章中,我们将专注于 Tkinter 中如何添加单选按钮( Radiobutton )。单选按钮是一种用于选择一个选项的 GUI 元素。无论是用于设置应用程序的选项、进行单项选择还是对数据进行过滤,单选按钮都是非常有用的。在本文中,我们将详细解释如何在 Tkinter 窗口中添加单选按钮,并如何获取用户所做的选择。
小蓝枣
2023/09/13
2.4K0
Android开发学习笔记(十七)单选按钮RadioButton
为使单选按钮产生互斥效果,需要把所有RadioButton放置在一个统一的RadioGroup中。
zstar
2022/06/14
9090
Android开发学习笔记(十七)单选按钮RadioButton
Android 开发第七讲 RadioButton (单选按钮)
之前我们响应按钮事件都是直接通过匿名内部类的方式. new一个对象来实现OnClick方法.
IBinary
2020/09/01
1.4K0
Android 开发第七讲 RadioButton (单选按钮)
8、单选按钮(JRadioButton)和复选框(JCheckBox)
单选按钮(JRadioButton)和复选框(JCheckBox)       实现一个单选按钮(或复选框),此按钮项可被选择或取消选择,并显示其状态。JRadioButton对象与ButtonGro
YGingko
2017/12/28
1.7K0
LayUI radio单选按钮监听事件实现方法
首先,官方文档所给出的展示如下:监听 radio单选 但是在搜索经验的时候,发现很多网友给出的代码有缺失,不适合小白开发 所以,小小整理一番,欢迎指摘 … 操作步骤: 首先 html 设计效果如下:
泥豆芽儿 MT
2020/01/13
7.4K0
LayUI radio单选按钮监听事件实现方法
微信小程序–单选复选按钮组的实现
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139625.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/23
2.5K0
微信小程序–单选复选按钮组的实现
点击加载更多

相似问题

使用reg ex读取文件时跳过行

29

如何在使用紧凑框架3.5读取文件时跳过行

11

如何在java中读取文件时跳过行

1274

使用for循环读取文件时跳过一行

21

使用Pandas读取excel文件时跳过特定行

246
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文