📄 form1.cs
字号:
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;
using System.Net.Sockets;
namespace mychat1
{
public delegate void OutDelegate(string text);
public partial class Form1 : Form
{
// private string userName;//需要改
private Talker talker;
public Form1()
{
InitializeComponent();
talker = new Talker();
talker.ClientConnected +=new ClientConnectedEventHandler(talker_ClientConnected);
}
private void Form1_Load(object sender, EventArgs e)
{
richTextBox1.Text = Application.StartupPath + "\\Image\\21.jpg";
TreeNode node1 = new TreeNode("当前在线人");
// node1.ImageIndex = 20;
treeView1.Nodes.Add(node1);
node1.Expand();
TreeNode node2 = new TreeNode("当前群信息");
// node2.ImageIndex = 20;
treeView1.Nodes.Add(node2);
//查找在线人数
Thread fh = new Thread(new ThreadStart(findhosts));
fh.IsBackground = true;
fh.Start();
//用广播包发布个人上线信息
Thread advertise = new Thread(new ThreadStart(srvradvertise));
advertise.IsBackground = true;
advertise.Start();
//接受广播信息
Thread acceptadvertise = new Thread(new ThreadStart(acceptservermessage));
acceptadvertise.IsBackground = true;
acceptadvertise.Start();
}
void talker_ClientConnected(IPEndPoint endPoint) //当有客户和你说话时。。。。。。。。。
{
// ClientConnectedEventHandler del = delegate(IPEndPoint end)
// IPHostEntry host = Dns.GetHostEntry(endp .Address);
string host = endPoint.ToString();
string title=host + "要和你聊天";
onechat onechat1 = new onechat(title);
onechat1.Show();
// txtContent.Text += String.Format("System[{0}]:\r\n远程主机{1}连接至本地。\r\n", DateTime.Now, end);
// txtContent.Invoke(del, endPoint);
}
public void findhosts()
{
while (true)
{
Socket remotehosts = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9051);
EndPoint ep = (EndPoint)iep;
remotehosts.Bind(iep);
byte[] data = new byte[1024];
int recv = remotehosts.ReceiveFrom(data, ref ep);
string stringdata = Encoding.ASCII.GetString(data, 0, recv);
string entry = ep.ToString();
if (!isexit(entry))
addcurrentnewnode(entry);
remotehosts.Close();
}
}
bool isexit(string str)
{
TreeNode trd = treeView1.Nodes[0];
foreach (TreeNode td in trd.Nodes)
if (td.Text == str)
return true;
return false;
}
void addcurrentnewnode(string str)
{
if (this.treeView1.InvokeRequired)
{
OutDelegate outdelgate = new OutDelegate(addcurrentnewnode);
this.treeView1.Invoke(outdelgate, new object[] { str });
return;
}
TreeNode newnode = new TreeNode(str);
TreeNode trd = treeView1.Nodes[0];
trd.Nodes.Add(newnode);
}
void addrichboxcontent(string str)
{
if (this.richTextBox1.InvokeRequired)
{
OutDelegate outdelgate = new OutDelegate(addrichboxcontent);
this.richTextBox1.Invoke(outdelgate, new object[] { str });
return;
}
richTextBox1.Text = richTextBox1.Text + str + "\r";
}
void srvradvertise()
{
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9051);//也可以IPAddress .Parse ("192.168.1.255")
byte[] hostname = Encoding.ASCII.GetBytes(Dns.GetHostName());
while (true)
{
server.SendTo(hostname, iep);
Thread.Sleep(6000);
// label1.Text = Dns.GetHostName();
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void groupBox4_Enter(object sender, EventArgs e)
{
}
private void acceptservermessage()
{
while (true)
{
Socket remotehosts = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9052);
EndPoint ep = (EndPoint)iep;
remotehosts.Bind(iep);
byte[] data = new byte[1024];
int recv = remotehosts.ReceiveFrom(data, ref ep);
string stringdata = Encoding.Unicode.GetString(data, 0, recv);
addrichboxcontent(stringdata);
remotehosts.Close();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if ((treeView1 .SelectedNode .Text )==treeView1 .Nodes [0].Nodes [0].Text )
{
MessageBox .Show ("你有能和自己聊天");
return ;
}
if (treeView1.SelectedNode.Text == "当前在线人")
return;
else if (treeView1.SelectedNode.Text == "当前群信息")
//群信息
return;
else if (treeView1.SelectedNode.Parent.Text == "当前在线人")
{
string ip;
int port;
getherip(treeView1 .SelectedNode .Text ,out ip, out port);
if (talker.ConnectByIp(ip, port))
{
onechat chat1 = new onechat("现在和" + treeView1.SelectedNode.Text + "聊天", treeView1.SelectedNode.Text);
chat1.Show();
}
else
{
MessageBox.Show("远程主机不存在,或者拒绝连接!");
}
}
}
public void getherip(string str, out string ip,out int port)
{
string[] herinfo = str.Split(':');
ip = herinfo[0];
port = 9053;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -