Estou implementando um cliente socket Java para fazer uma conexao local com um servidor socket em C. O cliente java envia o tamanho de uma String depois uma String ao servidor. O servidor le o tamanho da string, aloca memoria para ela, e depois le a string.
Criei os clientes/servidores em Java e em C, mas nao estou conseguindo o resultado esperado. De java pra java funciona e de c pra c funciona, mas de java pra c ou de c pra java nao da o resultado esperado.
Nao estou conseguindo enxergar o problema.
Obrigado.
Gustavo.
Estou enviando o codigo do servidor C e do cliente java.
Servidor C
// gcc -o TcpServer TcpServer.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <unistd.h>
int main() {
char *str_buff;
int len_buff;
int server_socket_fd;
int client_socket_fd;
struct sockaddr_in addr_server;
struct sockaddr_in addr_client;
socklen_t len_addr_client;
int quit_message = 0;
server_socket_fd = socket(PF_INET, SOCK_STREAM, 0);
addr_server.sin_family = AF_INET;
addr_server.sin_port = htons(12345);
addr_server.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
bind(server_socket_fd, (struct sockaddr *) &addr_server, sizeof(addr_server));
listen(server_socket_fd, 5);
while (!quit_message) {
client_socket_fd = accept(server_socket_fd, (struct sockaddr *) &addr_client, &len_addr_client);
read(client_socket_fd, &len_buff, sizeof(len_buff));
printf ("SIZE[%d]
", len_buff);
str_buff = (char *) malloc(len_buff);
read(client_socket_fd, str_buff, len_buff);
printf ("STRING[%s]
", str_buff);
if (strcmp(str_buff, "quit") == 0) {
quit_message = 1;
}
free(str_buff);
close(client_socket_fd);
}
close (server_socket_fd);
return 0;
}
Cliente Java
package socket.cliente;
import java.net.*;
import java.io.*;
public class TcpClient {
public static void main(String[] args) {
try {
Socket sock = new Socket(InetAddress.getLocalHost(), 12345);
BufferedOutputStream out = new BufferedOutputStream(sock.getOutputStream());
String env = args[0];
int len = env.length();
System.out.println("SIZE[" + len + "]");
out.write(len);
out.write(env.getBytes(), 0, len);
System.out.println("STRING[" + env + "]");
out.close();
sock.close();
} catch (UnknownHostException e1) {
e1.printStackTrace(System.err);
} catch (IOException e2) {
e2.printStackTrace(System.err);
}
}
}
Editado por um moderador que gosta de ver códigos entre as tags code