Kurde, coś nie idzie ;/
Moja wiedza w C# jest chyba za mała. Nie umiem sobie poradzić z tymi wątkami.
Mógłby ktoś na to spojrzeć i powiedzieć co jest źle? (odbiera tylko pierwszą wiadomość)
string retu;
int bajty2;
Thread th;
int i;
ThreadStart ts;
Socket sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public forma()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string host = ip.Text;
if (sok.Connected)
{
sok.Disconnect(true);
}
else
{
sok.Connect(ip.Text, Convert.ToInt32(port.Text));
if (sok.Connected)
{
forma.ActiveForm.Text = "Połączono z " + host;
button1.Text = "Rozłącz";
}
else MessageBox.Show("Nie można połączyć z hostem", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void button2_Click(object sender, EventArgs e)
{
i++;
if (sok.Connected)
{
byte[] msg = Encoding.UTF8.GetBytes(textBox3.Text);
int bajty;
bajty = sok.Send(msg, 0, msg.Length, SocketFlags.None);
MessageBox.Show("Wyslano " + bajty.ToString());
if (i == 1)
{
ts = new ThreadStart(this.Odbierz);
th = new Thread(ts);
th.IsBackground = true;
th.Start();
th.Suspend();
}
else if(i == 2)
{
th.Resume();
}
if (i >= 3)
{
th.Suspend();
th.Resume();
}
//th.Interrupt();
}
else MessageBox.Show("Musisz połączyć się z hostem!", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void Odbierz()
{
while (sok.Connected)
{
byte[] rmsg = new byte[1024];
sok.ReceiveTimeout = 3000;
bajty2 = sok.Receive(rmsg, 0, 1024, SocketFlags.None);
do
{
// textBox2.AppendText(Encoding.UTF8.GetString(rmsg));
MessageBox.Show("Odebrano " + bajty2.ToString());
retu = Encoding.UTF8.GetString(rmsg);
bajty2 = 0;
} while (bajty2 > 0);
MessageBox.Show(retu);
}
}
Wiem, że głupi to wygląda...