📄 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 delegate void ThisOutDelegate(string text, string her);
public delegate void tipmessage(bool nan,string str,string str1);
public partial class Form1 : Form
{
private string hername = null;
private string storedata = null;
private string userName;//需要改
private listener mylistener;
public Form1(string username,string myownip)
{
InitializeComponent();
userName = username;
string[] mine = myownip.Split(':');
label2.Text += mine[0];
label3.Text += mine[1];
mylistener = new listener(myownip);
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.ImageLocation = Application.StartupPath + "\\Image\\22.jpg";
TreeNode node1 = new TreeNode("当前在线人");
treeView1.Nodes.Add(node1);
node1.Expand();
TreeNode node2 = new TreeNode("当前群信息");
treeView1.Nodes.Add(node2);
//查找在线人数
Thread fh = new Thread(new ThreadStart(findhosts));
fh.IsBackground = true;
fh.Start();
//接受广播信息
Thread acceptadvertise = new Thread(new ThreadStart(acceptservermessage));
acceptadvertise.IsBackground = true;
acceptadvertise.Start();
//开始听
mylistener.form1getserverdata = new ThisOutDelegate(get_serverdata);
mylistener.changeform1();
mylistener.StartListen();
}
void get_serverdata(string str,string her) //当有客户和你说话时。。。。。。。。。
{
tipmessage del = delegate(bool nan,string str1,string str2)
{
timer1.Enabled = nan;
storedata += str1;
hername = str2;
};
this.Invoke(del,true,str,her);
}
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 = userName + ":" + Encoding.Unicode.GetString(data, 0, recv);
string[] all = stringdata.Split(':');
if (all[1].Equals("退出服务器"))//除了此人
deletenode(all[2]);
else
{
for (int i = 0; i < all.Length - 1; i++)
if (!isexit(all[i]))
addcurrentnewnode(all[i]);
}
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 deletenode(string str) //删除用户
{
OutDelegate del = delegate(string str1)
{
TreeNode trd = treeView1.Nodes[0];
if (isexit(str))
{
foreach (TreeNode tr in trd.Nodes)
if (tr.Text.Equals(str))
trd.Nodes.Remove(tr);
}
};
while (!this.IsHandleCreated)//在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke 及This.DialogResult
{
}
if (this != null)
treeView1.Invoke(del, str);
}
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";
}
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)
{
}
private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if ((treeView1.SelectedNode.Text).Equals(userName))
{
MessageBox.Show("你不能和自己聊天");
return;
}
if (treeView1.SelectedNode.Text == "当前在线人")
return;
else if (treeView1.SelectedNode.Text == "当前群信息")
//群信息
return;
else if (treeView1.SelectedNode.Parent.Text.Equals("当前在线人"))
{
(new onechat(treeView1.SelectedNode.Text,mylistener,userName,1)).Show();
}
}
/* public void getherip(string str, out string ip, out int port)
{
TcpClient server;
string[] herinfo = null;
try
{
server = new TcpClient(serverip, serverport);
byte[] info = Encoding.Unicode.GetBytes(treeView1.SelectedNode.Text + ":her ip information");
server.Client.Send(info);
int recv = server.Client.Receive(info);
string str1 = Encoding.Unicode.GetString(info, 0, recv);
herinfo = str1.Split(':');
}
catch (SocketException)
{
MessageBox.Show("unable to connect to server!", "提示!", MessageBoxButtons.OK);
}
ip = herinfo[0];
port = Convert.ToInt32(herinfo[1]);
}*/
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
commonmethod.sendtoserver(this.userName + ":我下线了!");
}
catch (Exception e1)
{
MessageBox.Show(e1.Message , "提示!", MessageBoxButtons.OK);
return;
}
try
{
mylistener.StopListen();
Application.Exit();
}
catch
{
}
}
private void timer1_Tick(object sender, EventArgs e)
{
button5.Visible = true;
if (button5.ForeColor == Color.Red)
button5.ForeColor = Color.Black;
else
button5.ForeColor = Color.Red;
}
private void button5_Click(object sender, EventArgs e)
{
new onechat(storedata, mylistener,userName,hername).Show();
timer1.Enabled = false;
button5.Visible = false;
storedata = null;
}
private void button3_Click(object sender, EventArgs e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -