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]