加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

将字符串从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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读