Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde Fiz um código baseado em alguns tutoriais na net e aqui no fórum que faz a leitura de algumas informações enviadas via socket, o programa esta funcionando, a leitura vem de um determinado ip e porta. Porém é o seguinte o equipamento que me envia os dados ele tem duas portas, logo eu precisava que no mesmo código ele pegue os dados que vem da porta 8081 e 8082 do ip do aparelho, para testar se estava funcionando eu clonei o código no mesmo form coloquei dois listview e mandei executar, funcionou porém na minha opinião ficou muito sujo, deve ter um modo que apenas com um código eu consiga pegar os dados das duas portas e jogar os dados de cada porta em um listview. Abaixo segue o código, porém para não ficar muita coisa na tela vou postar o código pegando apenas de uma porta:
using.......... delegate void AddMessage(string sNewMessage). private Socket m_sock. private byte[] m_byBuff = new byte[256]. private event AddMessage m_AddMessage. public Form1() { InitializeComponent(). m_AddMessage = new AddMessage(OnAddMessage). } listView1.View = View.Details. listView1.Columns.Add("Hexa"). listView1.Columns[0].Width = 200. listView1.Columns.Add("Wigand"). listView1.Columns[1].Width = 200. listView1.View = View.Details. } private void m_btnConnect_Click(object sender, EventArgs e) { Cursor cursor = Cursor.Current. Cursor.Current = Cursors.WaitCursor. try { // Close the socket if it is still open if (m_sock!= null && m_sock.Connected) { m_sock.Shutdown(SocketShutdown.Both). System.Threading.Thread.Sleep(10). m_sock.Close(). } // Create the socket object m_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp). // Define the Server address and port IPEndPoint epServer = new IPEndPoint(IPAddress.Parse(m_tbServerAddress.Text), Convert.ToInt32(lblPorta.Text)). // Connect to server non-Blocking method m_sock.Blocking = false. AsyncCallback onconnect = new AsyncCallback(OnConnect). m_sock.BeginConnect(epServer, onconnect, m_sock). } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Server Connect failed!"). } Cursor.Current = cursor. } public void OnConnect(IAsyncResult ar) { // Socket was the passed in object Socket sock = (Socket)ar.AsyncState. // Check if we were sucessfull try { //sock.EndConnect( ar ). if (sock.Connected) SetupRecieveCallback(sock). else MessageBox.Show(this, "Unable to connect to remote machine", "Connect Failed!"). } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Unusual error during Connect!"). } } Socket sock = (Socket)ar.AsyncState. // Check if we got any data try { int nBytesRec = sock.EndReceive(ar). if (nBytesRec > 0) { // Wrote the data to the List string sRecieved = Encoding.ASCII.GetString(m_byBuff, 0, nBytesRec). // WARNING: The following line is NOT thread safe. Invoke is // m_lbRecievedData.Items.Add( sRecieved ). Invoke(m_AddMessage, new string[] { sRecieved }). // If the connection is still usable restablish the callback SetupRecieveCallback(sock). } else { // If no data was recieved then the connection is probably dead Console.WriteLine("Client {0}, disconnected", sock.RemoteEndPoint). sock.Shutdown(SocketShutdown.Both). sock.Close(). } } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Unusual error druing Recieve!"). } } public void OnAddMessage(string sMessage) { string x = sMessage.Replace("\n",""). if (x.Length == 10) { string digitos_iniciais = Convert.ToInt64(x.Substring(4, 2), 16).ToString(). string digitos_finais = Convert.ToInt64(x.Substring(6), 16).ToString(). ListViewItem lvi = new ListViewItem(sMessage). lvi.SubItems.Add(digitos_iniciais + " " + digitos_finais). listView1.Items.Add(lvi). } } AsyncCallback recieveData = new AsyncCallback(OnRecievedData). sock.BeginReceive(m_byBuff, 0, m_byBuff.Length, SocketFlags.None, recieveData, sock). } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Setup Recieve Callback failed!"). } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (m_sock!= null && m_sock.Connected) { m_sock.Shutdown(SocketShutdown.Both). m_sock.Close(). } }Carregando comentários...