Fórum Comunicação Socket #530489
02/09/2015
0
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
Curtir tópico
+ 0Posts
08/09/2015
Thiago Moises
Gostei + 0
08/09/2015
Nilsen Miotto
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.
Gostei + 0
09/10/2015
Thiago Moises
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 :)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)