using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace MulticastChat
{
public partial class Form1 : Form
{
Socket cs;
Thread t;
IPEndPoint gip;
public Form1()
{
InitializeComponent();
gip = new IPEndPoint(IPAddress.Parse(GroupIptextBox.Text), 7080);
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
panel1.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void Receive()
{
try
{
EndPoint ep = (EndPoint)gip;
byte[] data = new byte[2048];
string Msg;
int recv;
while (true)
{
recv = cs.ReceiveFrom(data, ref ep);
Msg = Encoding.ASCII.GetString(data, 0, recv);
string UserName = "";
UserName = Msg.Substring(0, Msg.IndexOf(":"));
Msg = Msg.Substring(Msg.IndexOf(":") + 1);
ReceverichTextBox.Text = ReceverichTextBox.Text + UserName + " : " + Msg + "\n";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void Sendbutton_Click(object sender, EventArgs e)
{
try
{
byte[] msg = Encoding.ASCII.GetBytes(UserNametextBox.Text + " : " + SendtextBox.Text);
SendtextBox.Clear();
cs.SendTo(msg, SocketFlags.None, gip);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void Connectbutton_Click(object sender, EventArgs e)
{
try
{
if (GroupIptextBox.Text != "")
{
if (UserNametextBox.Text != "")
{
if (Connectbutton.Text == "Connect")
{
cs = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 7080);
cs.Bind(ipe);
cs.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("224.10.0.1")));
t = new Thread(new ThreadStart(Receive));
t.IsBackground = true;
t.Start();
panel1.Enabled = true;
Connectbutton.Text = "Disconnect";
GroupIptextBox.ReadOnly = true;
UserNametextBox.ReadOnly = true;
}
else if (Connectbutton.Text == "Disconnect")
{
t.Abort();
cs.Close();
GroupIptextBox.ReadOnly = false;
UserNametextBox.ReadOnly = false;
panel1.Enabled = false;
Connectbutton.Text = "Connect";
}
}
else
{
MessageBox.Show("Please Enter Your Name...", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Please Enter Group Ip...", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
No comments:
Post a Comment