pow pessoal ja to a um mes com esse problema… não consigo domar essas threads …
o servidor ta de boa… o problema é só no cliente msm,
peço ajuda à vcs, brigadão…ó cod tá meio gambi… mas depois de tantas alterações…
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;
namespace ClienteChat
{
public partial class Cliente : System.Web.UI.Page
{
public static TcpClient tcpClient;
protected void Page_Load(object sender, EventArgs e)
{
bool envia = false;
if (!IsPostBack)
{
string ipAddress = "187.25.175.84";
IPAddress address = IPAddress.Parse(ipAddress);
tcpClient = new TcpClient();
tcpClient.Connect(new IPEndPoint(Dns.Resolve(ipAddress).AddressList[0], 4019));
ImplementaThread.Run(tcpClient);
envia = true;
}
txtRecebe.Text += ImplementaThread.ReceberMensagens(envia);
}
public void EnviarMensagem()
{
string mensagem = txtMsg.Text;
NetworkStream mandaStream = tcpClient.GetStream();
/* adiciona um caractere especial para melhorar a
* impressão da mensagem no servidor console
* e converte a mensagem em um array de bytes
*/
byte[] saida = Encoding.ASCII.GetBytes(mensagem + "$");
//envia a mensagem ao servidor
mandaStream.Write(saida, 0, saida.Length);
mandaStream.Flush();
}
protected void btnEnviar_Click(object sender, EventArgs e)
{
EnviarMensagem();
txtMsg.Text = "";
}
}
}
/////////
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Threading;
using System.Net.Sockets;
using System.Text;
namespace ClienteChat
{
public class ImplementaThread
{
public static Thread receiveThread;
public static TcpClient tcpCliente;
public static void Run(TcpClient tcpClient)
{
tcpCliente = tcpClient;
receiveThread = new Thread(new ThreadStart(ThreadProcPollOnEthernet));
receiveThread.Name = "Client's Receive Thread";
receiveThread.ApartmentState = ApartmentState.MTA;
receiveThread.Start();
}
private static void ThreadProcPollOnEthernet()
{
while (true)
{
Thread.Sleep(100);
try
{
ReceberMensagens(true);
}
catch (Exception)
{
return;
}
}
}
public static string ReceberMensagens(bool envia)
{
NetworkStream servidorStream = tcpCliente.GetStream();
byte[] entrada = new byte[10000];
//recebe uma mensagem do servidor
if (envia)
{
return "oi";
}
servidorStream.Read(entrada, 0, (int)tcpCliente.ReceiveBufferSize);
//converte a mensagem do servidor em uma string
string respostaServidor = Encoding.ASCII.GetString(entrada);
if (!string.IsNullOrEmpty(respostaServidor))
{
return respostaServidor;
}
return string.Empty;
}
}
}