Zdravím,
- událost btnSendToServer_Click funguje naprosto v pohodě a odešle serveru zprávu (tento Button, na který je událost při kliku spuštěna je na hlavním formuláři)
- událost btnPiskvorky_Click nefunguje (pokaždé když kliknu na Button, který je ve třídě (HerniPlocha.cs), tak mi to hodí, že Stream stream = klient.GetStream(); je NULL. Víceméně se uzavře (spadne spojení) a já nevím proč - (The operation is not allowed on non-connected sockets))
To znamená, že zpráva 1 se odešle, kdežto zpráva 2 ne.
Pomůže mi někdo? Měl někdo podobný problém někdy? Prosím jenom hodnotné a užitečné odpovědi, díky moc.
using System;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.IO;
namespace Piškvorky
{
public partial class Klient : Form
{
// proměnná port typu řetězec
string port;
// proměnná IP typu řetězec
string IP;
// vytvoříme klienta
TcpClient klient = new TcpClient();
// pomocná proměnná plocha
HerniPlocha plocha;
// koncový bod serveru
IPEndPoint koncovyBod;
public Klient()
{
// inicializace komponent
InitializeComponent();
// nastavíme label na výchozí pozici
labelStav.Text = " Nepřipojeno k serveru ";
// vytvoříme hrací plochu
plocha = new HerniPlocha();
}
// metoda, která se snaží připojit k serveru
public void pripojit()
{
try
{
// načteme port
port = textBoxPort.Text;
// načteme IP
IP = textBoxIP.Text;
// nejprve vyparsujeme IP adresu
IPAddress novaIP = IPAddress.Parse(IP);
// a převede port z čísla na string
int novyPort = Convert.ToInt16(port, 10);
// koncový bod
koncovyBod = new IPEndPoint(novaIP, novyPort);
// a zkusíme se připojit na server :-)
klient.Connect(koncovyBod);
// nastavíme viditelnost tlačítka odpojeno na true
btnOdpojit.Enabled = true;
// nastavíme viditelnost tlačítka připojeno na false
btnPripojit.Enabled = false;
// zobrazíme hrací pole
plocha.zobrazPlochu();
// přidáme plochu na formulář (jedná se o Groupbox)
this.Controls.Add(plocha);
if (klient.Connected)
{
try
{
labelStav.Text = " Připojeno ";
}
catch (Exception)
{
labelStav.Text = " Neznámý stav ";
}
}
}
// chyba při spojení na server
catch (SocketException s)
{
MessageBox.Show(s.Message.ToString());
}
// špatná IP nebo Port
catch (FormatException)
{
MessageBox.Show(" Špatně zadaná IP adresa nebo číslo portu ");
}
// špatně zadaný Port (přetečení - více jak 16bitové)
catch (OverflowException)
{
MessageBox.Show(" Špatně zadaný port ");
}
}
// metoda, která se odpojí od serveru
void odpojit()
{
// odpojíme klienta od serveru
klient.Close();
// nastavíme viditelnost tlačítek
btnOdpojit.Enabled = false;
btnPripojit.Enabled = true;
// a smažeme plochu z tohoto formuláře
this.Controls.Remove(plocha);
if (!klient.Connected)
{
try
{
labelStav.Text = " Nepřipojeno k serveru ";
}
catch (Exception)
{
labelStav.Text = " Neznámý stav ";
}
}
}
public void poslatServeru(string zprava)
{
try
{
Stream stream = klient.GetStream();
StreamWriter sw = new StreamWriter(stream);
sw.Write(zprava);
}
catch (SocketException s)
{
MessageBox.Show(s.Message);
}
}
public void testPripojeni()
{
if (!klient.Connected)
{
try
{
labelStav.Text = " Nepřipojeno k serveru ";
}
catch (Exception)
{
labelStav.Text = " Neznámý stav ";
}
}
else
{
try
{
labelStav.Text = " Připojeno k serveru ";
}
catch (Exception)
{
labelStav.Text = " Neznámý stav ";
}
}
}
private void btnPripojit_Click(object sender, EventArgs e)
{
pripojit();
}
private void brnOdpojit_Click(object sender, EventArgs e)
{
odpojit();
}
private void btnSendToServer_Click(object sender, EventArgs e)
{
poslatServeru(" Zpráva 1 ");
testPripojeni();
}
public void btnPiskvorky_Click(object sender, EventArgs e)
{
poslatServeru(" Zpráva 2 ");
testPripojeni();
}
}
}