将字符串从Java发送到C(套接字)
发布时间:2020-12-15 05:08:21 所属栏目:Java 来源:网络整理
导读:我试图使用C从A Java客户端向C服务器发送一些字符串. 首先,我发送字符串的长度.然后,我在C中手动分配内存 最后我逐个字符地发送字符串. 问题有时我得到正确的字符串,有时我得到整个字符串额外的其他未知字符(就像我分配比我得到的更多). 这是Java代码: prot
我试图使用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(); } } 这是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,0) ; *data = dataRecv; memoireAllouee[i]=dataRecv; } printf("nn%dnnn",stringLength); printf("n%sn",memoireAllouee); } 如果你认为这种方法不是最优的,你可以帮助我加快速度吗? 解决方法
回答你的第二个问题:
for (int i=0; i<data.getBytes().length ;i++) { out.write(data.getBytes()[i]); } 应该只是: out.write(data.getBytes()); 和 for (i=0;i<stringLength;i++) { recv(sock,0) ; *data = dataRecv; memoireAllouee[i]=dataRecv; } 应该: int offset= 0; while (offset < stringLength) { int count = recv(sock,&memoireAllouee[offset],stringLength-offset 0) ; if (count == 0) // premature EOS .. do something break; if (count == -1) // Error ... do something break; offset += count; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |