将指针转换为字符串并作为字符数组发送无法正常工作
Converting pointer to string and send as char array not working properly
我在通过套接字从C++客户端向 Java 服务器发送目录名称时遇到问题。
发送像"hello world"这样的普通消息效果很好,但以下内容没有,我无法弄清楚问题是什么:
char const * files = ffd.cFileName; // get directory name
string str(files, 0, strlen(files)); // convert pointer to string, right?
char mess[str.size()];
strcpy(mess, str.c_str()); // make char array :)
cout << "Send file: " << mess << " with strlen: " << strlen(mess) << " and sizeof: " << sizeof(mess) << endl;
int sent = 0;
if ((sent = send(connectSocket, mess, sizeof(mess), 0)) == SOCKET_ERROR)
{
closesocket(connectSocket);
WSACleanup();
connectToServer();
}
Java 服务器只接收如下目录名称:
wam
p
Win
dow
s
Win
dow
s.o
ld
wxW
idg
ets
我无法理解我错过了什么,因为我已经尝试了所有可能的方法来做到这一点,并且C++客户端打印如下:
"发送文件:带有 strlen: 7 和大小:7 的窗口"
我不认为java服务器是问题,因为我可以完美地接收正常的字符串和消息,但无论如何这里是JAVA代码:
is = socket.getInputStream();
byteArray = new byteArray[1024];
while (true) {
c = is.read(byteArray, 0, byteArray.length);
String recv = new String(byteArray, 0, c);
System.out.println(recv);
if (recv.equals("<EOF>")){
break;
}
list.add(recv);
}
如果您要求其他内容或任何东西,请发表评论,我会修复它。
问:您是通过TCP还是UDP发送?我猜是TCP,如果是这种情况,您需要将套接字视为更多的流。该流可能会分解成一堆数据包 - 您并不能真正控制它。我可能会做的是在每个目录的字符串长度(例如,3foo,4barz等)上加上前缀,从套接字中读取并确定构成逻辑块或字符串的内容,然后基于此组装/打印字符串。如果你走这条路,你需要跟踪你每次阅读了多少,直到你认为你已经完成了。
我解决了它,刚刚添加了byteArray = new byte[1024];
,现在它可以工作了:
while (true) {
byteArray = new byte[1024]; // I ADDED THIS AND NOW THE JAVA SERVER RECEIVES IT CORRECTLY!
c = is.read(byteArray, 0, byteArray.length);
recv = new String(byteArray, 0, c);
System.out.println(recv);
if (recv.equals("<EOF>")){
break;
}
list.add(recv);
}
相关文章:
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 多字节到宽字符无法正常工作
- 如果带有字符数组的语句无法正常工作
- 字符* 串联无法正常工作
- 澄清了 strcpy() 在像这样初始化字符数组时的工作 *Arr.
- 多字节字符'377777'如何工作?
- 如何与C 字符串中的非ASCII字符一起工作
- 试图让while循环工作,当输入符号而不是字符时会中断
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- std::string 上的 substr 无法正常工作,因为存在一些不可见但看起来像空格的字符
- 文件名如何在"char"和2字节字符之间工作
- C++ 使用 || 检查字符是否不在字符串中不工作
- 字符串到字符指针的转换如何在C++中工作
- C++无符号字符无法按预期工作
- 我无法获得基于读取字符数组的算法来工作
- 字符* 常量值 ERROR 与 GNU G++ 编译器
- VS2013 字符文本不能作为 MSDN 的规范工作
- 将指针转换为字符串并作为字符数组发送无法正常工作
- C++,复制构造函数在字符数组中无法正常工作
- C++程序已停止工作-求解常微分方程