📄 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.IO;
using System.Xml;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace mychatserver
{
public delegate void OutDelegate(string text);
public partial class Form1 : Form
{
IOxml xml1;
public Form1()
{
InitializeComponent();
xml1 = new IOxml();
control1 = new controlserver();
}
static controlserver control1;
Thread addnewthread;
Thread sendmessage;
private void Form1_Load(object sender, EventArgs e)
{
}
private void button4_Click(object sender, EventArgs e)
{
string ip = textBox2.Text;
int port =Convert .ToInt32 ( textBox3.Text);
xml1.create(ip , port );
}
private void serverforuser()//转发程序
{
while (true )
{
int recv=0;
byte[] data = new byte[1024];
string stringdata = null;
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(xml1 .GetIP ()),9053);
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
newsock.Bind(ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)sender;
recv = newsock.ReceiveFrom(data, ref Remote);
stringdata =Encoding .Unicode .GetString (data,0,recv);
int a=stringdata .IndexOf (":");
string str2 = stringdata.Substring(0, a);
string str3 = stringdata.Substring(a + 1);
byte[] b = Encoding.Unicode.GetBytes(str3);
newsock.SendTo(b, b.Length , SocketFlags.None,(EndPoint) controlserver.usertable[str2]);
newsock.Close();
}
}
private void button1_Click(object sender, EventArgs e)//启动服务器
{
control1.havenewuser = new OutDelegate(addcurrentnewclient);
addnewthread=new Thread (new ThreadStart (control1.startserver));
addnewthread.IsBackground = true;
addnewthread.Start();
sendmessage = new Thread(new ThreadStart(serverforuser));
sendmessage.IsBackground = true;
sendmessage.Start();
button1.Enabled = false;
button2.Enabled = true;
}
public void addcurrentnewclient(string str)
{
if (this.listBox1 .InvokeRequired)
{
OutDelegate outdelgate = new OutDelegate(addcurrentnewclient);
this.listBox1 .Invoke(outdelgate, new object[] { str });
return;
}
this.listBox1.Items.Add(str);
}
private void button2_Click(object sender, EventArgs e)
{
if (addnewthread != null)
{
addnewthread.Abort();
sendmessage.Abort();
control1.client.Stop();
}
button1.Enabled = true;
button2.Enabled = false;
}
private void button3_Click(object sender, EventArgs e) //广播
{
string content= textBox1.Text;
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9052);//也可以IPAddress .Parse ("192.168.1.255")
byte[] messagecontent = Encoding.Unicode .GetBytes (textBox1 .Text );
server.SendTo(messagecontent , iep);
server.Close();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (control1 .client !=null )
control1.client.Stop();
Application.Exit();
}
private void button5_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -