Fórum Exemplo em TCP/IP ajuda... #20621
04/12/2007
0
[b:3a49126811]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 [/b:3a49126811]
[b:3a49126811]SE ALGUEM PODER AJUDAR FICO GRATO![/b:3a49126811]
[u:3a49126811][i:3a49126811][b:3a49126811]Server[/b:3a49126811][/i:3a49126811][/u:3a49126811]
[b:3a49126811][u:3a49126811]Cliente[/u:3a49126811][/b:3a49126811]
[/i][/u]
mas tem somente um probleminha so aceita um cliente...
nao estou conseguindo entrar uma forma de fazer com que aceite mas de uma [/b:3a49126811]
[b:3a49126811]SE ALGUEM PODER AJUDAR FICO GRATO![/b:3a49126811]
[u:3a49126811][i:3a49126811][b:3a49126811]Server[/b:3a49126811][/i:3a49126811][/u:3a49126811]
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();
}
}
}
[b:3a49126811][u:3a49126811]Cliente[/u:3a49126811][/b:3a49126811]
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();
}
}
}
Internautarv
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)