Pessoal, preciso entregar um trabalho amanhã na universidade, o trabalho em sí é muito maior do que esta passagem, pensei que não teria problemas, mas não está funcionando...  Eu tenho um cliente e um servidor em Java, no meio desta comunicação, eu preciso colocar um "man-in-the-middle" em C...  Para isso estou usando o seguinte código:  Em C:   #include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <resolv.h>
#define PORT            31111
#define MAXBUF         1000
#define PORTC           41111
#define SERVER_ADDR     "127.0.0.1"
int main(int argc, char **argv){
    int s, client_s, len, port;
    struct sockaddr_in self;
    struct sockaddr_in client;
    int addrlen = sizeof(client);
    char msg_write[MAXBUF];
    char msg_read[MAXBUF];
    port = PORT;
    if (argc == 2) {
        port = atoi(argv[1]);
    }
/*---Open socket for streaming---*/
    if ( (s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
        perror("Socket");
        exit(errno);
    }
/*---Initialize server address/port struct---*/
    bzero(&self, sizeof(self));
    self.sin_family = AF_INET;
    self.sin_port = htons(port);
    self.sin_addr.s_addr = INADDR_ANY;
/*---Assign a port number to the socket---*/
    if ( bind(s, (struct sockaddr*)&self, sizeof(self)) != 0 ) {
        perror("socket--bind");
        exit(errno);
    }
/*---Make it a "listening socket"---*/
    if ( listen(s, 1) != 0 ) {
        perror("socket--listen");
        exit(errno);
    }
/*---accept a connection ---*/
    printf ("Server C accpeting connections!\n");
    client_s = accept(s, (struct sockaddr*)&client, &addrlen);
    printf ("%s:%d connected\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
    read (client_s, msg_read, MAXBUF);
    len = strlen(msg_read) - 1;
    if (msg_read[len] == '\n'){
        msg_read[len] = '';
    }
    printf ("Mensagem do cliente: %d\n", msg_read);
//envia mensagem recebida ao servidor em java
    int sC, n, buflen, server_port;
    struct sockaddr_in dest;
    msg_write[MAXBUF];
    char server_addr[50];
    server_port = PORTC;
    strcpy (server_addr, SERVER_ADDR);
/*---Open socket for streaming---*/
    if ( (sC = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
        perror("Socket");
        exit(errno);
    }
/*---Initialize server address/port struct---*/
    bzero(&dest, sizeof(dest));
    dest.sin_family = AF_INET;
    dest.sin_port = htons(server_port);
    if ( inet_aton(server_addr, &dest.sin_addr.s_addr) == 0 ) {
        perror(server_addr);
        exit(errno);
    }
/*---Connect to server---*/
    if ( connect(sC, (struct sockaddr*)&dest, sizeof(dest)) != 0 ) {
        perror("Connect ");
        exit(errno);
    }
    write (s, msg_read, strlen(msg_read)+1);
    close(s);
    close(sC);
}  Porém não está dando certo...  Aparentemente a mensagem não está sendo lida corretamente...  Alguém poderia me ajudar por favor?   Abraços...