首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过套接字发送数据(Java到C)

通过套接字发送数据(Java到C)
EN

Stack Overflow用户
提问于 2018-02-06 02:20:49
回答 1查看 60关注 0票数 1

我正在尝试使用对称密钥在作为客户端的Java和作为服务器的C之间发送一些加密的整数,代码如下……问题是我无法读取数字或整数!我在Java端使用writeInt函数发送数字,首先在循环中使用它分别对每个数字进行加密/解密,然后使用对称密钥对整个数字进行加密/解密。你知道怎么让它工作吗?

下面是java代码:

代码语言:javascript
复制
public void sendData(int data) throws IOException
    {
        int dataInInt = data, numberOfDigits = 0;
        System.out.println("DATAININT =  " + dataInInt);
        while(dataInInt != 0)
        {
            dataInInt /= 10;
            numberOfDigits++;
        }
        dataInInt = data;

        System.out.println("Number of digits to be sent = " + numberOfDigits);
        dout.writeInt(numberOfDigits);


        int [] dataInDigits = new int [numberOfDigits];
        for (int j = (numberOfDigits - 1); j >= 0; j--)
        {
            dataInDigits[j] = dataInInt % 10;
            dataInInt /= 10;
        }


        int [] dataToSendInt = new int [numberOfDigits];
        for (int i = 0; i < dataToSendInt.length; i++)
        {
            dataToSendInt[i] = dataInDigits[i] ^ symmetricKeyInDigits[i % symmetricKeyInDigits.length];
            System.out.println("TOSEND = " + dataToSendInt[i]);
            dout.writeInt(dataToSendInt[i]);
        }
    }

这是C端:

代码语言:javascript
复制
char *receiveData(int sock)
{   
    int counter = 0, i = 0, j = 0;
    char buffer[256];
    bzero(buffer, 256);

    int tempKey = symmetricKeyInt, KeyDigitsNumber = 0;
    while (tempKey > 0)
    {
        tempKey /= 10;
        KeyDigitsNumber++;
    }
    tempKey = symmetricKeyInt;

    int KeyArr[KeyDigitsNumber];
    for (j = KeyDigitsNumber - 1; j >= 0; j--)
    {
        KeyArr[j] = tempKey % 10;
        tempKey = tempKey / 10;
    }

    read(sock, buffer, 255);
    int bufferSize = ntohl(*((int*)&buffer))
    char *temp;
    char *decrypted = malloc(bufferSize);
    char numBuffer[20];
    int testInt;
    int encInt;

    for (j = 0; j < bufferSize; j++)
    {
        bzero(numBuffer, 20);
        read(sock, numBuffer, 19);
        testInt = ntohl(*((int*)&numBuffer)) ^ KeyArr[j %KeyDigitsNumber];
        sprintf(temp, "%d", testInt);
        decrypted[j] = temp;
    }
    printf("THis from inside receiveData function: %s\n", (char *)decrypted);
    return decrypted;
}
EN

回答 1

Stack Overflow用户

发布于 2018-02-06 02:50:08

而不是将它们作为整数发送并使用writeInt,而是将整数作为字符串发送并在两端进行转换。也可以使用printWriter。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48629024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档