繁体   English   中英

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

[英]Sending data over sockets (Java to C)

我正在尝试使用对称密钥在Java作为客户端与C作为服务器之间发送一些加密的整数,这是代码....问题是我无法读取数字或整数! 我在Java端使用writeInt函数首先发送数字,然后在循环中使用它分别加密/解密每个数字,然后使用对称密钥对整个数字进行加密/解密。 任何想法如何使其工作?

这是java代码:

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面:

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;
}

而不是将它们作为整数发送并使用writeInt,而是将整数作为字符串发送并在任一侧进行转换。 还要使用printWriter。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM