Соединение между C ++ Socket и Java-клиентом - PullRequest
1 голос
/ 23 апреля 2019

Я создаю серверное приложение на C ++ и клиентское приложение на Java.Я хочу обменять 32-битное целое число между ними.

И у меня возникла проблема, потому что, когда я пытаюсь отправить что-то с клиента Java, я получаю случайный ответ на сервере C ++ (например, я отправляю '0' и один раз получаюодно число, в другой раз у меня другое число. Я читал о кодировании Little и Big Endian, но я думаю, что это другая проблема, потому что отправка '0' генерирует огромное значение, отличное от 0.

Клиент Java:

import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.Socket;


public class Main {
    public static void main(String[] args) throws Exception{
        Socket socket =  new 
Socket(InetAddress.getByName("127.0.0.1"),10000);
        DataOutputStream out = new DataOutputStream(socket.getOutputStream());

        out.writeInt(0);
    }
}

Сервер C ++:

#include <netinet/in.h>
#include <string>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <cerrno>
#include <cstring>
#include <iostream>

using namespace std;

int main(){


    int port = 10000;
    string ip_addr = "127.0.0.1";
    int domain = AF_INET;
    int type = SOCK_STREAM;
    int protocol = 0;

    int stopCondition = 0xFFFFFFFF;


    int socketHandle;
    struct sockaddr_in address;

    int clientSocketHandle;
    struct sockaddr_in clientAddress;
    size_t clientAddressSize;

    int buffer;


   if((socketHandle=socket(domain,type,protocol))<0)
        cout<<strerror(errno);

    address.sin_family = domain;
    inet_pton(domain,ip_addr.c_str(),&address.sin_addr);
    address.sin_port=htons(port);


    if((bind(socketHandle,(struct sockaddr *)&address,sizeof(address)))<0)
        cout<<strerror(errno);


    if (listen(socketHandle, 1) < 0)
        cout << strerror(errno);


    if ((clientSocketHandle = accept(socketHandle, (struct sockaddr *) &clientAddress, (socklen_t *) &clientAddressSize)) < 0)
        cout << strerror(errno);


    do {

        if (recv(clientSocketHandle, &buffer, sizeof(int), 0) > 0)
            cout<<buffer<<endl;

    } while (buffer != stopCondition);


    if(shutdown(clientSocketHandle,SHUT_RDWR)<0)
        cout<<strerror(errno);


    if(shutdown(socketHandle,SHUT_RDWR)<0)
        cout<<strerror(errno);

    return 0;
}

Как правильно реализовать клиент на Java для правильной работы с сервером C ++?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...