отправлять сообщения с сервера C ++ на клиент Java

0

Я новичок в c++ и программировании сокетов. Мне удалось создать сервер с помощью c++ на машине unix, и я подключил этот сервер к java-клиенту, работающему на другой машине Windows. Мне также удалось отправить сообщения от клиента на сервер с успехом. То, что я havent удалось еще, это отправить сообщения от сервера к клиенту. Я полагаю, что я новичок в c++, но я не нашел в интернете что-то очень полезное. Я только нашел c++ клиентский код связи с сервером, а не сервер для клиента. Может кто-нибудь дать какое-то руководство?

Thnx заранее для вашего времени и вашей помощи...

c++ код сервера

int main( int argc, const char** argv )
{


    /* SOCKET VARIABLES */
    int sock;
    struct sockaddr_in server;
    int mysock;
    char buff[1024];
    int rval;


    /*CREATE SOCKET*/
    sock =socket(AF_INET, SOCK_STREAM, 0);

    if (sock<0) 
    {
        perror("*FAILED TO CREATE SOCKET*");
        exit(1);
    }

    server.sin_family=AF_INET;
    server.sin_addr.s_addr=INADDR_ANY;
    server.sin_port=htons(5000);

    /*CALL BIND*/
    if (bind(sock, (struct sockaddr *)&server, sizeof(server)))
    {
        perror("BIND FAILED");
        exit(1);
    }


    /*LISTEN*/
    listen(sock, 5);


    /*ACCEPT*/
    do{

        mysock= accept(sock, (struct sockaddr *) 0, 0);

        if (mysock==-1) 
        {

            perror ("ACCEPT FAILED");
        }
        else
        {
            memset(buff, 0, sizeof(buff));

            if ((rval=recv(mysock, buff, sizeof(buff), 0)) < 0) 
                perror("READING STREAM MESSAGE ERROR");
            else if(rval==0)
                printf("Ending connection");
           else
                printf("MSG: %s\n", buff);

           printf("GOT THE MESSAGE (rval = %d)\n", rval);

            }

    }while (1) ;
    return 0; 

Код клиента Java

public class SOK_1_CLIENT {




    public void run() throws Exception
    {
        String adrress="172.16.151.237"; //localhost -- samemachine
        Socket SOCK =new Socket (adrress,5000);
        PrintStream PS =new PrintStream(SOCK.getOutputStream());
        PS.println("HELLO TO SERVER FROM CLIENT");

        InputStreamReader IR =new InputStreamReader(SOCK.getInputStream());
        BufferedReader BR = new BufferedReader(IR);

        String MESSAGE =BR.readLine();
        System.out.println(MESSAGE + "java");
    }


}
  • 0
    Будьте осторожны с соглашениями об именах java, потому что это несколько сбивает с толку, чтобы увидеть так много CONSTANTS в коде.
Теги:
sockets

3 ответа

1

В C сокетах есть дескрипторы файла двусторонней коммуникации. Вы можете написать им, используя send(2). Проверьте man 2 send.

 char * buffer;
 size_t length, sent;

 while (length && (sent = send(mysock, buffer, length, 0)) > 0) {
      length -= send;
 }
 if (sent < 0) 
     perror("send");

Обратите внимание, что в отличие от java BufferedWriter в C send не гарантирует отправку всего буфера за один раз. Таким образом, цикл while. Если вы хотите буферизованный сокет IO, вы можете использовать fdopen для создания потока stdio, но это не рекомендуется, если вы хотите иметь возможность передавать флаги и перехватывать ошибки сокетов.

1

Хорошо, я вижу, что вам удалось получить messsage на C++ сервере и отправить из java-клиента. См. "Получение из сокета" в java и "отправка из сокета" в C++. Используйте их в приведенном выше коде и помните, когда сервер отправляет, в то время, когда java-клиент должен ожидать данных с сервера. Это решит вашу проблему.

Если вы хотите сделать клиент-сервер как чат-приложение, у вас есть две возможности:

  • Используйте "select"
    • Использовать "потоки"

google ключевые слова, выделенные в соответствии с вашими требованиями и используемым языком.

см. это для сокетов в C++, и это для сокетов Java

  • 0
    Большое спасибо за подробную информацию ... Это действительно очень полезно .. Однако я уже исправил свою проблему благодаря предыдущему ответу. Я не хочу приложение чата. До сих пор я экспериментировал ... Что мне действительно нужно для моей работы, так это отправлять только сообщения с server2client ... Спасибо еще раз !!
0

Используйте send() с последним параметром (flags), установленным в 0.

Если вы находитесь в Windows, вам также может понадобиться инициализировать и очистить Winsock - проверьте это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню