0

このコードを使用して、Java クライアントから Java サーバーに整数を送信します

int  n = rand.nextInt(50) + 1;
            DataOutputStream dos = new DataOutputStream(_socket.getOutputStream());
            dos.writeInt(n);

そして、私はこのコードでサーバーでそれを読みました

DataInputStream din = new DataInputStream(socket.getInputStream());
        int ClientNumber= din.readInt();
        System.out.println(ClientNumber);


        ClientNumber++;
       DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
       dos.writeInt(ClientNumber);

       String randomString= getRandomValue(10,20);
       dos.writeUTF(randomString);

それは完全に機能しますが、今はCクライアントを書きたいですこのコードを試しました

  #include <stdio.h>
#include <errno.h>
#include <signal.h>

#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define SERVEURNAME "localhost" // adresse IP de mon serveur

int to_server_socket = -1;

void main ( void )
{

    char *server_name = SERVEURNAME;
    struct sockaddr_in serverSockAddr;
    struct hostent *serverHostEnt;
    long hostAddr;
    long status;
    char buffer[512];

    bzero(&serverSockAddr,sizeof(serverSockAddr));
    hostAddr = inet_addr(SERVEURNAME);
    if ( (long)hostAddr != (long)-1)
        bcopy(&hostAddr,&serverSockAddr.sin_addr,sizeof(hostAddr));
    else
    {
        serverHostEnt = gethostbyname(SERVEURNAME);
        if (serverHostEnt == NULL)
        {
            printf("gethost rate\n");
            exit(0);
        }
        bcopy(serverHostEnt->h_addr,&serverSockAddr.sin_addr,serverHostEnt->h_length);
    }
    serverSockAddr.sin_port = htons(8071);
    serverSockAddr.sin_family = AF_INET;

    /* creation de la socket */
    if ( (to_server_socket = socket(AF_INET,SOCK_STREAM,0)) < 0)
    {
        printf("creation socket client ratee\n");
        exit(0);
    }
    /* requete de connexion */
    if(connect( to_server_socket,
               (struct sockaddr *)&serverSockAddr,
               sizeof(serverSockAddr)) < 0 )
    {
        printf("demande de connection ratee\n");
        exit(0);
    }
    /* envoie de donne et reception */
    int value = htons( 4 );
    write( to_server_socket, &value, sizeof( value ) );

    printf(buffer);


}

しかし、うまくいきません。私はEclipseを使用してJavaコードをコンパイルし、サーバーとCコード(クライアント)のxcodeを実行していますが、問題があるとは思いません

編集:サーバーでエラーが発生しました

java.net.SocketException: java.net.SocketOutputStream.socketWrite0(Native Method) でパイプが壊れています。 java.io.DataOutputStream.writeInt(DataOutputStream.java:182) で ServiceRequest.run(ServiceRequest.java:36) で java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) で java.util. concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

サーバーが整数を待っているためだと思いますが、そうではありません...?

4

1 に答える 1