use*_*561 3 c java sockets tcp
我正在尝试使用C将一些字符串从A Java客户端发送到C服务器.首先,我发送字符串的长度.然后,我在C中手动分配内存,最后我按字符发送字符串.
问题,有时我得到正确的字符串,有时我得到整个字符串+额外的其他未知字符(就像我分配超过我得到).
这是Java代码:
protected void send(String data){
short dataLength=(short)data.length();
try {
out.write(dataLength);
for (int i=0; i<data.getBytes().length ;i++)
{
out.write(data.getBytes()[i]);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这是C代码:
void read4(int sock, int *data)
{
char dataRecv;
char* memoireAllouee=NULL;
int stringLength;
int i=0;
recv(sock, (char*)&dataRecv, sizeof(dataRecv), 0) ;
*data = dataRecv;
stringLength=dataRecv;
memoireAllouee=malloc(sizeof(char)*stringLength);
if (memoireAllouee==NULL)
{
exit(0);
}
for (i=0;i<stringLength;i++)
{
recv(sock, (char*)&dataRecv, sizeof(dataRecv), 0) ;
*data = dataRecv;
memoireAllouee[i]=dataRecv;
}
printf("\n\n%d\n\n\n",stringLength);
printf("\n%s\n",memoireAllouee);
}
Run Code Online (Sandbox Code Playgroud)
如果你认为这种方法不是最优的,你可以帮助我加快速度吗?
protected void send(String data){
short dataLength=(short)data.length();
try {
out.write(dataLength);
for (int i=0; i<data.getBytes().length ;i++)
{
out.write(data.getBytes()[i]);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
对于初学者,你要为每个角色重新计算整个getBytes()数组两次.保存到一个变量并使用它 - 你正在使这需要二次时间,完全不必要.另外,为什么不直接调用,而不是循环?byte[]byteArrayout.write(byteArray)for
其次,data.length()并不总是等于data.getBytes().length().确保你写byteArray.length的不仅仅是data.length().
最后,确保在两端都使用一致的字符集.字符串到字节数组的映射很大程度上依赖于它Charset,因此请确保它Charset在两侧都是相同的,因此您不会遇到编码问题.
| 归档时间: |
|
| 查看次数: |
3893 次 |
| 最近记录: |