Чат в C#

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Pegas
Сообщения: 0
Зарегистрирован: 05 окт 2017, 11:04

05 окт 2017, 11:26

Доброго времени суток, есть готовый чат. Я совсем новичок в этом деле и было бы хорошо,если бы вы помогли мне разобрать код.

Разобралась с функциями отправки и получения сообщений.

using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;

namespace _1
{

public partial class Форма : Form
{

const int x_port = 10201;
const string x_ChatID = "ID301";
const string x_ChatSeparator = "|";
string UserName = "Петрова";
readonly Color x_ChatColor_miss = Color.Gray;
readonly Color x_ChatColor_main = Color.Black;
private UdpClient udp;
public IPAddress x_IP;

delegate void AppendTextDelegate(string msg, Color clr);

public Форма()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
this.lbl_nickname.Text = UserName;
x_IP = x_getSelfIP();
udp = new UdpClient(x_port);
x_sendMessage("HELLO", x_ChatID);
x_Start_Listen();
}

private void x_Start_Listen()
{
udp.BeginReceive(x_Recive_MSG, new object());
}

private void x_Recive_MSG(IAsyncResult ar)
{
IPEndPoint ip = new IPEndPoint(IPAddress.Any, x_port);
byte[] bytes = udp.EndReceive(ar, ref ip);

if (bytes.Length > 0)
{
string message = Encoding.ASCII.GetString(bytes);
}

string msg = "[ " + DateTime.Now.ToLongTimeString() + " ]" + "[ " + ip.Address.ToString() + " ]:" + Encoding.UTF8.GetString(bytes);
AppendText(msg, x_ChatColor_main);
x_Start_Listen();
}

private void AppendText(string msg, Color clr)
{
if (InvokeRequired)
{
BeginInvoke(new AppendTextDelegate(AppendText), new object[] { msg, clr });
}
else
{
int len;
rtxt_chat.AppendText(Environment.NewLine);
len = rtxt_chat.TextLength;
rtxt_chat.AppendText(msg);
rtxt_chat.Select(len, msg.Length);
rtxt_chat.SelectionColor = clr;
rtxt_chat.SelectionLength = 0;
}
}

private void btn_send_Click(object sender, EventArgs e)
{
x_sendMessage("Сообщение", txtMsg.Text);
}

private bool x_sendMessage(string cmd, string message)
{
IPEndPoint local = new IPEndPoint(x_IP, x_port + 1);
IPEndPoint dst = new IPEndPoint(IPAddress.Broadcast, x_port);
UdpClient send = new UdpClient(local);
try
{
string msg = UserName + x_ChatSeparator + cmd + x_ChatSeparator + message;
byte[] bytes = Encoding.UTF8.GetBytes(msg);
send.Send(bytes, bytes.Length, dst);
}
catch (Exception)
{
return false;
}
finally
{
send.Close();
}
return true;
}
private IPAddress x_getSelfIP()
{
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
IPAddress local = IPAddress.Loopback;
foreach (IPAddress addr in localIPs)
{
if (addr.AddressFamily == AddressFamily.InterNetwork && !IPAddress.IsLoopback(addr) && !addr.ToString().StartsWith("169."))
{
local = addr;
break;
}
}
return local;
}
}
}
Ответить