Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java -从UDP事务接收格式错误/不完整的字符串

Java -从UDP事务接收格式错误/不完整的字符串
EN

Stack Overflow用户
提问于 2018-02-26 18:37:17
回答 1查看 208关注 0票数 1

我已经编写了一个Java应用程序,用于通过UDP与服务器(用C实现)通信。这个应用程序以字符串的形式交换所有数据。

Java代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
byte[] buff = data.getBytes();

// Parse IP address
InetAddress address = InetAddress.getByName(addr);

// Send data
DatagramPacket pack = new DatagramPacket(buff, buff.length, address, port);
DatagramSocket sock = new DatagramSocket();
sock.send(pack);

// Wait for a response
byte[] recvBuff = new byte[BUFF_SIZE];
DatagramPacket recv = new DatagramPacket(recvBuff, BUFF_SIZE);
sock.receive(recv);

sock.close();

// Pass the data to some down-stream process
handler(new String(recvBuff, "UTF-8"); 

C代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void someFunction(struct sockaddr_in client){
    srand(time(0));
    int num = rand(); // Generate some garbage data
    char* data = malloc(15);
    sprintf(data, "%d", num);
    send_udp(client, data);
}

/*
* Sends all bytes contained in buf2 over UDP
*/
int send_udp(struct sockaddr_in client, char* buf2){
    int len = sizeof(client);
    return sendto(sockfd, buf2, strlen(buf2), 0, (struct sockaddr*) &client, len);
}

当我的Java代码从C服务器接收回一个字符串,并将它接收到的字节解析为一个字符串时,该字符串看起来是“不完整的”,在调试器或堆栈跟踪中查看时没有右引号。这些字符串还会导致几个内置方法抛出异常。例如,将这样一个包含其他有效整数的字符串传递给Integer.parse()将导致引发数字格式异常。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Exception in thread "Thread-0" java.lang.NumberFormatException: For input string: "26310

我已经确认我正在使用UTF-8解码原始的UDP字节。

我的C代码运行在64位的Ubuntu 16.04安装上。我的Java代码通过EclipseNeon.3 (4.6.3)在OpenJDK 1.8.0_151上运行。

有没有人知道为什么会发生这种情况,以及如何解决?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-26 18:46:35

如果Java代码没有接收到字符串的一部分,那么C代码就不会发送它。UDP数据报被完整地接收,或者根本不被接收。或者您的接收缓冲区太短。

接收到的字符串不可能有null终止符。

我看不到任何证据或原因,发送的字符串甚至应该有一个前导引号,更不用说尾随引号了。我认为您误解了错误消息。我认为真正的问题是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new String(recvBuff, "UTF-8"); 

这应该是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new String(recv.getData(), 0, recv.getLength(), "UTF-8");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48994949

复制
相关文章
选择篇(017)-哪个选项是不正确的?
在JavaScript中,所有对象键都是字符串(除了Symbol)。尽管有时我们可能不会给定字符串类型,但它们总是被转换为字符串。
齐丶先丶森
2022/05/12
1.3K0
面试题30(关于if的用法哪个是正确的?)
public class IfTest{ public static void main(string[]args){ int x=3; int y=1;
Java学习
2018/04/17
1.1K0
什么是正则化_lo正则化求解方式
Cutout[1]是一种新的正则化方法。原理是在训练时随机把图片的一部分减掉,这样能提高模型的鲁棒性。它的来源是计算机视觉任务中经常遇到的物体遮挡问题。通过cutout生成一些类似被遮挡的物体,不仅可以让模型在遇到遮挡问题时表现更好,还能让模型在做决定时更多地考虑环境(context)。
全栈程序员站长
2022/09/30
4840
什么是正则化_lo正则化求解方式
面试题15(下列哪个赋值语句是不正确的?)
下列哪个赋值语句是不正确的? A)float f = 11.1 B)double d = 5.3E12 C)float d = 3.14f D)double f = 11.1E10f 考点:该面试题主要考察求职者对float单精度和 double双精度基本数据类型了解以及掌握。 出现频率:★★★★★ 【面试题分析】Java提供f|loat单精度和 double双精度基本数据类型。 float类型占4个字节32位,double类型占8个字节,64位。在Java中,声明的小数都是double类型的。 floa
Java学习
2018/04/18
1.7K0
MySQL 是哪个公司的?
MySQL是一种关系型数据库管理系统,由瑞典MySQL AB公司开发,后被Sun公司收购,最终被Oracle公司收购。
很酷的站长
2023/08/25
2.5K0
MySQL 是哪个公司的?
java是哪个公司的
Sun Microsystems是IT及互联网技术服务公司(已被甲骨文收购)Sun Microsystems 创建于1982年。
全栈程序员站长
2022/01/17
3.1K0
java是哪个公司的
Tensorflow实战(4)-TensorFlow的正则化实现
在训练深度学习网络时,在损失函数上加上正则项是防止过拟合的一个重要方法。本文介绍两种在TensorFlow中如何加入正则化项的方法, 但无论何种方法大的逻辑都是:创建一个正则化方法;然后将这个正则化方法应用到变量上。
YoungTimes
2022/04/28
8010
Tensorflow实战(4)-TensorFlow的正则化实现
【五线谱】高低八度标记 ( 高八度标记 | 标记范围的音符整体提升一个八度 | 低八度标记 | 标记范围的音符整体降低一个八度 )
在五线谱中 , 如果遇到节奏的音高很高 , 则需要在五线谱上加很多上加线 , 这种情况 , 也可以使用 高低八度标记 进行处理 ;
韩曙亮
2023/03/30
1.2K0
【五线谱】高低八度标记 ( 高八度标记 | 标记范围的音符整体提升一个八度 | 低八度标记 | 标记范围的音符整体降低一个八度 )
php进程daemon化的正确实现方法
daemon 音标 : [‘di:mən] , 中文含义为守护神或精灵的意思 . 其实它还有个意思 : 守护进程 .
用户2323866
2021/07/13
8900
机器学习中,正则化是怎么回事?
在机器学习中最大的危险就是过拟合,为了解决过拟合问题,通常有两种办法,第一是减少样本的特征(即维度),第二就是我们这里要说的“正则化”(又称为“惩罚”,penalty)。 从多项式变换和线性回归说起
机器学习AI算法工程
2018/03/14
9800
机器学习中,正则化是怎么回事?
正则化
最小化目标函数时,可以看做在控制损失函数不变的情况时令正则项最小化,几何意义如下所示:蓝色圈表示没有限制的损失函数随着 w 迭代寻找着最小化的过程的 E(w) 函数等高线(同个圆上的损失函数值相同),蓝色圈和橙色圈之和就是目标函数值,目标函数最小化的点往往出现在蓝圈和橙圈相交的点即目标函数最小化的参数值 w∗ 。
为为为什么
2022/09/28
1.7K0
正则化
【DB笔试面试546】在Oracle中,关于SESSION_PRIVS字典视图,哪个陈述是正确的?
字典视图SESSION_PRIVS返回了当前用户会话中可以使用的系统权限,不包含对象权限。对象权限应该查询USER_TAB_PRIVS视图。
AiDBA宝典
2019/09/29
1.1K0
Spark ML 正则化 标准化 归一化 ---- spark 中的正则化
Normalize a vector to have unit norm using the given p-norm. 使用给定的p-范数规范化向量,使其具有单位范数。
流川疯
2021/12/06
6070
个人原创:浅谈「正则化项」是如何防止过拟合的?
不难理解,接近于 0 的权重对模型复杂度几乎没有影响,而离群值权重(取值相对更大的
不可言诉的深渊
2020/05/09
1.2K0
个人原创:浅谈「正则化项」是如何防止过拟合的?
机器学习中的正则化是怎样进行的?——ML Note 41
如果用二次函数去拟合就是下图左边的样子,如果用高阶函数拟合就会得到下图右边的样子(即泛化能力比较差的过拟合情况)。
讲编程的高老师
2020/08/25
4060
机器学习中的正则化是怎样进行的?——ML Note 41
线性回归的正则化
“Regularization——Regularized linear regression”。
讲编程的高老师
2020/08/26
5200
线性回归的正则化
关于java类加载正确的是_java类初始化过程
我们当在另一个类中引用其他类的final静态值的时候,编译器把其他类的final符号引用存储在自己类的常量池中了
全栈程序员站长
2022/09/22
3810
逻辑回归的正则化
“Regularization——Regularized logistic regression”。
讲编程的高老师
2020/08/26
1K0
逻辑回归的正则化
解读正则化
正则化是为了避免过拟合现象的出现而出现的,本质是对模型训练误差和泛化误差的一个平衡(过拟合下的泛化能力是比较弱的)。正则化是机器学习中的一种叫法,其他领域叫法各不相同:
爱编程的小明
2022/09/06
6800
模型正则化
模型正则化欠拟合与过拟合线性回归模型2次多项式回归4次多项式回归评估3种回归模型在测试数据集上的性能表现L1范数正则化Lasso模型在4次多项式特征上的拟合表现L2范数正则化
用户3577892
2020/06/11
1K0

相似问题

new导航挂载一个屏幕,然后不接受从另一个屏幕再次传递的新params

12

如何在putty中刷新整个屏幕

13

如何从主屏幕创建新屏幕?

22

如何在用户进入屏幕时自动重新加载或刷新整个屏幕。在react原生中

110

如何通过编程使用android应用程序捕获整个屏幕屏幕截图?

115
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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