Comunicação Socket

02/09/2015

0

Bom dia Galera, tudo bem?
Estou desenvolvendo um aplicativo para WP que faz comunicação socket com um servidor Socket que criei em java.
O aplicativo se conecta normalmente, mas estou com problema na hora de enviar mensagens.
O APP não da erro nem nada, mas o servidor não recebe a mensagem. O servidor só recebe a mensagem no momento em que eu fecho o aplicativo.
Ex:
1) envio a mensagem e servidor não recebe;
2)fecho o App ai o servidor recebe todas as mensagens enviadas pelo app anteriormente.

Obs: Montei um cliente simples em java e este funciona normalmente. Envio a mensagem e recebo a mesma no servidor no mesmo momento.

//Servidor
    
    protected Socket socket = null;
    protected final OutputStream streamOut;
    protected final InputStream streamIn;
    private final Scanner s;
    protected String codigoAcesso = "";

    public ThreadClient(Socket socket) throws IOException {
        super();
        this.socket = socket;
        streamOut = socket.getOutputStream();
        streamOut.flush();
        streamIn = socket.getInputStream();
        s = new Scanner(streamIn);

    }

    @Override
    public void run() {
        while (s.hasNextLine()) {
            String mensage = s.nextLine();
            disparaMessageReceived(mensage);
        }
    }


Cliente Windows Phone

class ClientConnection
    {
        private const int TIMEOUT_MILLISECONDS = 5000;
        private const int MAX_BUFFER_SIZE = 2048;
        private int serverPort;
        private string serverHostnameString;
        private ManualResetEvent _clientDone = new ManualResetEvent(false);
        private SocketAsyncEventArgs _socketEventArg;
        private Socket _socket = null;
        
        public ClientConnection(String ip, int port)
        {
            this.serverPort = port;
            this.serverHostnameString = ip;
            
        }

        public void connect()
        {
            string result = string.Empty;
            DnsEndPoint hostEntry = new DnsEndPoint(this.serverHostnameString, this.serverPort);
            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
            socketEventArg.RemoteEndPoint = hostEntry;

            socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate (object s, SocketAsyncEventArgs e)
            {
                result = e.SocketError.ToString();
                _clientDone.Set();
            });

            _clientDone.Reset();
            _socket.ConnectAsync(socketEventArg);
            _clientDone.WaitOne(TIMEOUT_MILLISECONDS);

        }

        public void Send(String data)
        {
            if (_socket != null)
            {
                _socketEventArg = new SocketAsyncEventArgs();

                _socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;
                _socketEventArg.UserToken = null;

                _socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate (object s, SocketAsyncEventArgs e)
                {

                    _clientDone.Set();
                    _socketEventArg = null;
                });
            }


            if (_socketEventArg != null)
            {
                var payload = Encoding.UTF8.GetBytes(data);
                _socketEventArg.SetBuffer(payload, 0, payload.Length);

                _clientDone.Reset();

                _socket.SendAsync(_socketEventArg);

                _clientDone.WaitOne(TIMEOUT_MILLISECONDS);
                
            }
        }

        
    }



Desde ja agradeço :)
Thiago Moises

Thiago Moises

Responder

Posts

08/09/2015

Thiago Moises

Alguem? Por favor?
Responder

08/09/2015

Nilsen Miotto

eu não sei te dizer o que acontece mas vou te dizer uma experiência parecida que eu tive, no meu caso era usando websocket com servidor c++ e cliente javascript o meu problema foi o seguinte:
Quando era criado uma nova conexão o meu servidor enviava varias mensagens para o cliente as vezes elas não chegavam só quando eu enviava novamente outra mensagem que eu recebia as anteriores. No meu caso era um problema de performance, o servidor tentava enviar muitas mensagens para a mesma conexão em um curto prazo de tempo, Eu resolvi diminuindo a quantidade de mensagens enviadas para o cliente após conectar no servidor.
Responder

09/10/2015

Thiago Moises

eu não sei te dizer o que acontece mas vou te dizer uma experiência parecida que eu tive, no meu caso era usando websocket com servidor c++ e cliente javascript o meu problema foi o seguinte:
Quando era criado uma nova conexão o meu servidor enviava varias mensagens para o cliente as vezes elas não chegavam só quando eu enviava novamente outra mensagem que eu recebia as anteriores. No meu caso era um problema de performance, o servidor tentava enviar muitas mensagens para a mesma conexão em um curto prazo de tempo, Eu resolvi diminuindo a quantidade de mensagens enviadas para o cliente após conectar no servidor.


Cara.. desculpa de demora pra responder rsrs. corrido o ultimo mes.
Consegui resolver.. e era simples.. perdi dias com essa bosta rsrsrsrsrsr
era só colocar "\n" no final de cada string que eu ia enviar :/
kkkkkkkkkkkkkkkkkkkkk
Mas valeu pela ajuda :)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar