Array
(
)

Exemplo em TCP/IP ajuda...

Internautarv
   - 04 dez 2007

Este codigo abaixo esta funcionado, ok!
mas tem somente um probleminha so aceita um cliente...
nao estou conseguindo entrar uma forma de fazer com que aceite mas de uma

SE ALGUEM PODER AJUDAR FICO GRATO!

[u:3a49126811]Server[/u:3a49126811]
#Código

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
// Acesso 
using System.Threading;
using System.Net.Sockets;
using System.IO;


namespace Server
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private delegate void DelegateControleDisplay(string texto);
        private Socket connection;
        private Thread readThread;
        private NetworkStream socketStream;
        BinaryWriter writer;
        BinaryReader reader;

        private void btnStart_Click(object sender, EventArgs e)
        {
            readThread = new Thread(new ThreadStart(RunServer));
            readThread.Start();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            System.Environment.Exit(System.Environment.ExitCode);
        }

        private void Input_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode == Keys.Enter && connection != null)
                {
                    if (Input.Text.ToUpper() == "FIM")
                    {
                        connection.Close();
                    }
                }
            }
            catch (SocketException se)
            {
                Display.Text += "Erro: " + se;
            }
        }


        public void RunServer()
        {
            TcpListener listener;
            int counter = 1;
            // espera por uma conexao de cliente 
            try
            {
                listener = new TcpListener(5000);
                listener.Start();
                while (true)
                {
                    PegaControlePorThread("esperando po conexoes...");
                    // aceita conexoes recebidas
                    connection = listener.AcceptSocket();
                    // cria objetos NetWorkStream
                    socketStream = new NetworkStream(connection);
                    // cria objetos para transmitir dados por fluxo
                    writer = new BinaryWriter(socketStream);
                    reader = new BinaryReader(socketStream);

                   PegaControlePorThread(counter + " Conexoes recebidas.");

                    // responde ao cliente que a conexao foi aceita
                    writer.Write("Conexao aceita");
                    Input.ReadOnly = false;

                    string theReply = "";
                    //le dados da string enviada do cliente
                    do
                    {
                        try
                        {
                           //  le atring enviada para o servidor
                             theReply = reader.ReadString();
                          //   exibe a mensagem
                            PegaControlePorThread("\n" + theReply);
                        }
                        // manipula a execução, se houver erro ao ler os dados
                        catch (Exception)
                        {
                            break;                            
                        }                        
                    } while (theReply.ToUpper() != "FIM");

                   PegaControlePorThread("Cliente Terminou a conexao");

                  //  Input.ReadOnly = true;
                    writer.Close();
                    reader.Close();
                    socketStream.Close();
                    connection.Close();

                    ++counter;
                }
            }
            catch (Exception erro)
            {
                MessageBox.Show("Erro: " + erro.ToString());
            }
        }

        private void PegaControlePorThread(string text)
        {
            if (this.Display.InvokeRequired)
            {
                DelegateControleDisplay d = new DelegateControleDisplay(PegaControlePorThread);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.Display.Text += text + "\n";
                //AutoScroll
                Display.SelectionStart = Display.Text.Length;
                Display.ScrollToCaret();             
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            writer.Write("servidor >> digitou " + Input.Text);
            PegaControlePorThread("servidor >> digitou " + Input.Text);
            Input.Clear(); 
        }
    }
}



[u:3a49126811]Cliente[/u:3a49126811]

#Código
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
// 
using System.Threading;
using System.Net.Sockets;
using System.IO;

namespace Cliente
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private delegate void DelegateControleDisplay(string texto);
        private NetworkStream saida;
        private BinaryWriter escreve;
        private BinaryReader le;
        private string msg = "";
        private Thread readThread;

        private void btnConectar_Click(object sender, EventArgs e)
        {
            readThread = new Thread(new ThreadStart(RunCliente));
            readThread.Start();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            System.Environment.Exit(System.Environment.ExitCode);
        }

        private void input_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode == Keys.Enter)
                {
                    escreve.Write("cliente >> digitou "+input.Text);
                    PegaControleInput("cliente >> digitou " + input.Text);
                    input.Clear(); 
                }
            }
            catch (SocketException se)
            {
                PegaControlePorThread("Erro de escrita :" + se.ToString());
            }
        }

        private void PegaControlePorThread(string text)
        {
            if (this.Display.InvokeRequired)
            {
                DelegateControleDisplay d = new DelegateControleDisplay(PegaControlePorThread);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.Display.Text += text + "\n";
                //AutoScroll
                Display.SelectionStart = Display.Text.Length;
                Display.ScrollToCaret();
            }
        }

        private void PegaControleInput(string text)
        {
            if (this.input.InvokeRequired)
            {
                DelegateControleDisplay d = new   DelegateControleDisplay(PegaControleInput);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.input.Text += text + "\n";
                //AutoScroll
                input.SelectionStart = input.Text.Length;
                input.ScrollToCaret();
            }
        }


        public void RunCliente()
        {
            TcpClient cliente;
            // instancia  TcpClient para enviar dados ao servidor
            try
            {
                PegaControlePorThread("tentando se conectar...");
                // se conectar ao servidor
                cliente = new TcpClient();
                cliente.Connect("localhost", 5000);
                // obtem o NetworkStream Associado a TcpClient
                saida = cliente.GetStream();

                // cria objetos para escrever e ler  por meio de fluxo
                escreve = new BinaryWriter(saida);
                le = new BinaryReader(saida);

                PegaControlePorThread(" E/S Stream ...");

                // input.ReadOnly = false;
                // repete ate servidor sinalizar termino
                do
                {
                    try
                    {
                        // le mensagem do servidor
                        msg = le.ReadString();
                        PegaControlePorThread(msg);
                    }
                    // trata execução se houver erro
                     catch (Exception)
                    {
                        System.Environment.Exit(System.Environment.ExitCode);                        
                    }                    
                } while (msg.ToUpper() != "FIM" && cliente.Connected);

                PegaControlePorThread("Fechando conexões ...");

                // Fecha conexoes
                escreve.Close();
                le.Close();
                saida.Close();
                cliente.Close();
                Application.Exit();
            }
            // trata execução se houver erro
            catch (Exception erro)
            {
                MessageBox.Show(erro.ToString());                
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            escreve.Write("cliente >> digitou " + input.Text);
            PegaControlePorThread("cliente >> digitou " + input.Text);
            input.Clear(); 
        }
    }
}

[/i][/u]