TCP/IP以及Socket聊天室带类库源码分享

  • A+
所属分类:.NET技术
摘要

最近遇到个设备,需要去和客户的软件做一个网络通信交互,一般的我们的上位机都是作为客户端来和设备通信的,这次要作为服务端来监听客户端,在这个背景下,我查阅了一些大佬们的博客,和一些资料。将这些汇总做了一个简单的服务端监听和客户端的类库,希望对大家有一定的作用,当然更多还是给自己做一个日记。下面是类库和对类库测试的一些全部源代码,有需要的可以我QQ获取源代码(674479991)。


TCP/IP以及Socket聊天室带类库源码分享

最近遇到个设备,需要去和客户的软件做一个网络通信交互,一般的我们的上位机都是作为客户端来和设备通信的,这次要作为服务端来监听客户端,在这个背景下,我查阅了一些大佬们的博客,和一些资料。将这些汇总做了一个简单的服务端监听和客户端的类库,希望对大家有一定的作用,当然更多还是给自己做一个日记。下面是类库和对类库测试的一些全部源代码,有需要的可以我QQ获取源代码(674479991)。

1.通信类库

TCP/IP以及Socket聊天室带类库源码分享TCP/IP以及Socket聊天室带类库源码分享

using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; namespace TCP_DLL {     public class PSS_Server     {         private Dictionary<string, Socket> cilentList = new Dictionary<string, Socket>();         private Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);         private Socket ConnCilent;         /// <summary>         /// 创建服务端         /// </summary>         /// <param name="ip">IP地址</param>         /// <param name="Port">端口</param>         public PSS_Server(string ip, int Port)         {             IPAddress _IP = IPAddress.Parse(ip);             IPEndPoint endPoint = new IPEndPoint(_IP, Port);             server.Bind(endPoint);             server.Listen(20);         }          /// <summary>         /// 接受客户端的连入请求         /// </summary>         /// <param name="retn"></param>         /// <returns></returns>         public bool Accept(ref string retn)         {             string info = "";             try             {                 ConnCilent = server.Accept();//接受一个连入的客户端                 if (ConnCilent != null)                 {                     info = ConnCilent.RemoteEndPoint.ToString();                     cilentList.Add(info, ConnCilent);                     retn = info + "接入服务成功!";                 }                 return true;             }             catch (Exception)             {                 retn = info + "接入服务失败!";                 return false;             }         }          /// <summary>         /// 发送消息         /// </summary>         /// <param name="str"></param>         /// <returns></returns>         public bool SendMsg(string str)         {             try             {                 foreach (var item in cilentList)                 {                     byte[] arrMsg = Encoding.UTF8.GetBytes(str);                     item.Value.Send(arrMsg);                 }                 return true;             }             catch (Exception)             {                 return false;             }         }         /// <summary>         /// 接收客户端消息         /// </summary>         /// <param name="obj"></param>         /// <returns></returns>         public bool Receive(object obj, ref string msg)         {             Socket ConnCilent1 = ConnCilent;             IPEndPoint endPoint = null;             try             {                 byte[] arrMsg = new byte[1024 * 1024];                 int Len = ConnCilent1.Receive(arrMsg);                 if (Len != 0)                 {                     msg = Encoding.UTF8.GetString(arrMsg, 0, Len);                     endPoint = ConnCilent1.RemoteEndPoint as IPEndPoint;                 }                 return true;             }             catch (Exception)             {                 if (endPoint!=null)                 {                     cilentList.Remove(endPoint.ToString());                 }                 return false;             }         }         /// <summary>         /// 关闭连接         /// </summary>         public void Close()         {             try             {                 server.Close();                 cilentList.Clear();             }             catch (Exception)             {              }         }     }      public class PSS_Cilent     {         private Socket cilent = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);         /// <summary>         /// 创建客户端         /// </summary>         /// <param name="ip"></param>         /// <param name="Port"></param>         public bool Connect(string ip, int Port)         {             IPAddress _ip = IPAddress.Parse(ip);             IPEndPoint endPoint = new IPEndPoint(_ip, Port);             try             {                 cilent.Connect(endPoint);                 return true;             }             catch (Exception)             {                 return false;             }         }         /// <summary>         /// 关闭连接         /// </summary>         public void Close()         {             try             {                 cilent.Close();             }             catch (Exception)             {              }         }         /// <summary>         /// 接收消息         /// </summary>         /// <param name="o"></param>         /// <returns></returns>         public bool ReceiveMsg(ref string msg)         {             Socket _Cilent = cilent;             try             {                 //定义客户端收到的信息大小                 byte[] arrlist = new byte[1024 * 1024];                 //接收到的信息大小                 int Len = cilent.Receive(arrlist);                 msg = Encoding.UTF8.GetString(arrlist, 0, Len);                 return true;             }             catch (Exception)             {                 _Cilent.Close();                 return false;             }         }         /// <summary>         /// 发送消息         /// </summary>         /// <param name="msg"></param>         /// <returns></returns>         public bool SenMsg(string msg)         {             try             {                 byte[] arrmsg = Encoding.UTF8.GetBytes(msg);                 cilent.Send(arrmsg);                 return true;             }             catch (Exception)             {                 return false;             }         }     } }

View Code

 

2.服务端源代码和界面

TCP/IP以及Socket聊天室带类库源码分享

TCP/IP以及Socket聊天室带类库源码分享TCP/IP以及Socket聊天室带类库源码分享

using System; using System.Threading.Tasks; using System.Windows.Forms;  namespace ServerTest {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }         private TCP_DLL.PSS_Server Server;         private void textBox3_KeyDown(object sender, KeyEventArgs e)         {             if (e.KeyCode == Keys.Enter)             {                 if (Server.SendMsg(textBox3.Text).Equals(false))                 {                     MessageBox.Show("发送消息失败!!");                     return;                 }                 textBox3.Clear();             }         }          private void button1_Click(object sender, EventArgs e)         {             string retn = "";             Server = new TCP_DLL.PSS_Server(textBox1.Text, int.Parse(textBox2.Text));             textBox4.Invoke(new Action(() => textBox4.AppendText(DateTime.Now + "rn" + "创建服务完成,等待接入..." + "rn")));              if (Server.Accept(ref retn).Equals(false))             {                 MessageBox.Show(retn);                 return;             }             textBox4.Invoke(new Action(() => textBox4.AppendText(DateTime.Now + "rn" + retn + "rn")));               Task.Factory.StartNew(() =>             {                 while (true)                 {                     string retn1 = "";                     if (Server.Receive(ref retn).Equals(false))                     {                         MessageBox.Show("接收消息异常!!");                         return;                     }                     textBox4.Invoke(new Action(() => textBox4.AppendText(DateTime.Now + "rn" + retn + "rn")));                 }             });         }          private void button2_Click(object sender, EventArgs e)         {             Server.Close();         }     } }

View Code

2.客户端界面和源代码

TCP/IP以及Socket聊天室带类库源码分享

TCP/IP以及Socket聊天室带类库源码分享TCP/IP以及Socket聊天室带类库源码分享

using System; using System.Threading.Tasks; using System.Windows.Forms;  namespace CilentTest {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }         private TCP_DLL.PSS_Cilent Cilent = new TCP_DLL.PSS_Cilent();          private void textBox3_KeyDown(object sender, KeyEventArgs e)         {             if (e.KeyCode==Keys.Enter)             {                 if (Cilent.SenMsg(textBox3.Text).Equals(false))                 {                     MessageBox.Show("发送消息失败!!!");                     return;                 }                 textBox3.Clear();             }         }          private void button1_Click(object sender, EventArgs e)         {             if (Cilent.Connect(textBox1.Text,int.Parse(textBox2.Text)).Equals(false))             {                 MessageBox.Show("连接失败!!!");                 return;             }             textBox4.Invoke(new Action(() => textBox4.AppendText(DateTime.Now + "rn" + "创建连接完成....." + "rn")));             Task.Factory.StartNew(() =>             {                 while (true)                 {                     string retn = "";                     if (Cilent.ReceiveMsg(ref retn).Equals(false))                     {                         MessageBox.Show("接收消息异常!!");                         return;                     }                     textBox4.Invoke(new Action(() => textBox4.AppendText(DateTime.Now + "rn" + retn + "rn")));                 }             });         }          private void button2_Click(object sender, EventArgs e)         {             Cilent.Close();         }     } }

View Code

 3.效果图

TCP/IP以及Socket聊天室带类库源码分享