Java SRV <--> C CLI i Sockety

0

ma ktoś jakiś pure przykład współdziałania C i Javy przez sockety lub ma pomysł dlaczego krzyczy java.io.EOFException? java jest serwerkiem a C klientem - przecież to powinno hulać lol

package sockets;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        int portNumber = 12345;

        //InetAddress localHost = InetAddress.getLocalHost();
        InetAddress address = InetAddress.getByName(null);

        ServerSocket listener = new ServerSocket(portNumber, 0, address);

        try {
            Socket clientSocket = listener.accept();

            ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());
            ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());

            int i = (Integer) in.readObject();

            //String response = "mam !!!!!!";
            //out.writeObject(response);

            System.out.println("otrzymano: " + i);
            out.close();
            in.close();
            clientSocket.close();
        } finally {
            listener.close();
        }
    }
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(void) {
	int sockfd = socket(AF_INET, SOCK_STREAM, 0);
	struct sockaddr_in serv_addr;

	bzero((char *) &serv_addr, sizeof(serv_addr));

	serv_addr.sin_family = AF_INET;
	serv_addr.sin_port = htons(12345);
	inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);

	connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));

	write(sockfd, "11", strlen("11"));
	close(sockfd);
	return EXIT_SUCCESS;
}
0

dobra. powiem szczerze, nie umiem skompilować Twojego wynalazku w C ale: (jestem upośledzony muszę mieć ide za klocka)
jak krzyczy EOF to weź sprawdź czy coś tam w ogóle jest...

            Integer value;
            while(in.available() > 0 && (value = (Integer)in.readObject()) != null) {
                System.out.println(value);
            }
0

gcc mojwynalazek.c -o mojwynalazek xddd ? jest tam coś jest. tak wgl jedzie ktoś na openera w przyszłym roku? wiem ze to suabe teraz jet i mainstream, ale chyba nie ma nic lepszego w Polsce.

0

Nie znam i nie lubię socketów, ale czytanie stringa (0x31, 0x31) jako obiektu (nawet Integer) nie może się udać...

Zamień:

int i = (Integer) in.readObject();

Na:

int i = in.readInt();

oraz

write(sockfd, "11", strlen("11"));

na:

int value = 11;
write(sockfd, value, sizeof(value));

Może pomoże.

1 użytkowników online, w tym zalogowanych: 0, gości: 1