none
SocketClient RRS feed

  • Pergunta

  • Boa tarde,

     

    Estou desenvolvendo uma aplicação cliente com Sockets, mas quando vou passar o texto para o listBox, estou tendo problemas, o programa emite uma exceção do tipo "NotSupportedException" no momento em que passo o comando listBox1.Items.Add(); abaixo está o código que estou utilzando, esse primeiro método conecta ao servidor, os demais são utilizados na aplicação.

     

    try

    {

    UpdateControls(false);

    m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    IPAddress ip = IPAddress.Parse(textBox1.Text);

    int port = Convert.ToInt16(textBox2.Text);

    IPEndPoint ipEnd = new IPEndPoint(ip, port);

    m_clientSocket.Connect(ipEnd);

    if (m_clientSocket.Connected)

    {

    UpdateControls(true);

    WaitForData();

    }

    listBox1.Items.Add(this.result);

    }

    catch (SocketException se)

    {

    string str;

    str = "Conexão fallhou, o servidor está ativo ?" + se.Message;

    MessageBox.Show(str, "Aviso !");

    UpdateControls(false);

    }

     

    public void WaitForData()

    {

    try

    {

    if (m_pfnCallBack == null)

    {

    m_pfnCallBack = new AsyncCallback(OnDataReceived);

    }

    SocketPacket theSocPkt = new SocketPacket();

    theSocPkt.thisSocket = m_clientSocket;

    m_result = m_clientSocket.BeginReceive(theSocPkt.dataBuffer,

    0, theSocPkt.dataBuffer.Length,

    SocketFlags.None,

    m_pfnCallBack,

    theSocPkt);

    }

    catch (SocketException se)

    {

    MessageBox.Show(se.Message, "Erro !");

    }

    }

     

    public class SocketPacket

    {

    public Socket thisSocket;

    public byte[] dataBuffer = new byte[1];

    }

    public void OnDataReceived(IAsyncResult asyn)

    {

    try

    {

    SocketPacket theSocId = (SocketPacket)asyn.AsyncState;

    int iRx = theSocId.thisSocket.EndReceive(asyn);

    char[] chars = new char[iRx + 1];

    Decoder d = Encoding.UTF8.GetDecoder();

    int charLen = d.GetChars(theSocId.dataBuffer, 0, iRx, chars, 0);

    String szData = new String(chars);

    //listBox1.Items.Add(szData);

    if(szData.Equals("¨"))

    {

    return;

    }

    this.result = this.result + szData;

    WaitForData();

    }

    catch (SocketException se)

    {

    MessageBox.Show(se.Message, "Erro !");

    }

    }

     

     

    Se alguém puder me ajudar com alguma idéia, agradeceria muito.

     

    Desde já agradeço,

     

    Bruno Sena

    terça-feira, 10 de julho de 2007 17:09

Todas as Respostas

  • Pessoal,

     

    Descobri que o código que citei acima, funciona na versão 4.2 do Windows CE.

    Quando testei acima foi na versão 5.0, mesmo assim gostaria de saber porque isso ocorre...

     

    Se alguém souber de algo fico grato,

     

    Bruno Sena

    sexta-feira, 13 de julho de 2007 19:34