首页

<赞>C# 实现 服务器端和客户端Socket通讯,聊天功能实现源码

c#

2020-8-29

简单的实现了服务器和客户端的聊天功能

服务器端代码:

 

/// <summary>
		/// 应用程序的主入口点。
		/// </summary>
		[STAThread]
		static void Main()
		{
			Application.Run(new Form1());
		}
		// 定义私有变量。
		public bool m_bConnected = false;
		public IPEndPoint p = null;
		public Socket s = null;
		public NetworkStream ns = null;
		public TextReader r = null;
		public TextWriter w = null;
		public Thread t = null;
		public void ThreadListen()
		{
			Socket recv = null;
			recv = s.Accept();
			if(recv != null)
				m_bConnected = true;
			ns = new NetworkStream(recv);
			r = new StreamReader(ns);
			w = new StreamWriter(ns);
			while(m_bConnected)
			{
				string tmp;
				try
				{
					tmp = r.ReadLine();
					if(tmp.Length != 0)
					{
						lock(this)
						{
							richTextBox1.Text = "他说:" tmp "\n" richTextBox1.Text;
						}
					}
				}
				catch
				{
					MessageBox.Show("连接断开!!");
				}
			}
			recv.Shutdown(SocketShutdown.Both);
			recv.Close();
			s.Shutdown(SocketShutdown.Both);
			s.Close();
		}
		private void button1_Click(object sender, System.EventArgs e)
		{
			p = new IPEndPoint(IPAddress.Any, 34567);
			s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
			s.Blocking = true;
			s.Bind(p);
			s.Listen(0);
			t = new Thread(new ThreadStart(this.ThreadListen));
			t.Start();
			button1.Enabled = false;
		}
		private void richTextBox2_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
		{
			byte[] data;
			if(e.KeyChar == (char)13)
			{
				if(m_bConnected)
				{
					try
					{
						lock(this)
						{
							richTextBox1.Text = "我说:" richTextBox2.Text richTextBox1.Text;
							w.WriteLine(richTextBox2.Text);
							w.Flush();
						}
					}
					catch
					{
						MessageBox.Show("连接断开!!");
					}
				}
				else
				{
					MessageBox.Show("对不起,还没有与对方连接,不能通信!");
				}
				richTextBox2.Text = "";
				richTextBox2.Focus();
			}
		}

客户端代码:

		/// <summary>
		/// 应用程序的主入口点。
		/// </summary>
		[STAThread]
		static void Main()
		{
			Application.Run(new Form1());
		}
		// 定义私有变量。
		public bool m_bConnected = false;
		public Thread t = null;
		public IPEndPoint p = null;
		public Socket s = null;
		public NetworkStream ns = null;
		public TextReader r = null;
		public TextWriter w = null;
		public void ThreadListen()
		{
			string tmp;
			while(m_bConnected)
			{
				try
				{
					tmp = r.ReadLine();
					if(tmp.Length != 0)
					{
						lock(this)
						{
							richTextBox1.Text = "他说:" tmp "\n" richTextBox1.Text;
						}
					}
				}
				catch
				{
					MessageBox.Show("连接断开!!");
				}
			}
			s.Shutdown(SocketShutdown.Both);
			s.Close();
		}
		private void button1_Click(object sender, System.EventArgs e)
		{
			p = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));
			s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
			s.Connect(p);
			if(s.Connected)
			{
				ns = new NetworkStream(s);
				r = new StreamReader(ns);
				w = new StreamWriter(ns);
				t = new Thread(new ThreadStart(this.ThreadListen));
				t.Start();
				m_bConnected = true;
				button1.Enabled = false;
			}
		}
		private void richTextBox2_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
		{
			if(e.KeyChar == (char)13)
			{
				if(m_bConnected)
				{
					lock(this)
					{
						try
						{
							richTextBox1.Text = "我说:" richTextBox2.Text richTextBox1.Text;
							w.WriteLine(richTextBox2.Text);
							w.Flush();
						}
						catch
						{
							MessageBox.Show("连接断开!!");
						}
					}
				}
				else
				{
					MessageBox.Show("对不起,还没有与对方连接,不能通信!");
				}
				richTextBox2.Text = "";
				richTextBox2.Focus();
			}
		}

 

资源下载此资源下载价格为2D币(VIP免费),请先
资源文件列表
TalkClient/App.ico , 1078
TalkClient/AssemblyInfo.cs , 1846
TalkClient/bin/Debug/TalkClient.exe , 10752
TalkClient/bin/Debug/TalkClient.pdb , 17920
TalkClient/Form1.cs , 8078
TalkClient/Form1.resx , 5315
TalkClient/obj/Debug/TalkClient.exe , 10752
TalkClient/obj/Debug/TalkClient.exe.incr , 1716
TalkClient/obj/Debug/TalkClient.Form1.resources , 324
TalkClient/obj/Debug/TalkClient.pdb , 17920
TalkClient/obj/Debug/TalkClient.projdata , 6792
TalkClient/TalkClient.csproj , 4411
TalkClient/TalkClient.csproj.user , 1773
TalkClient/TalkClient.sln , 916
TalkClient/TalkClient.suo , 7168
TalkServer/App.ico , 1078
TalkServer/AssemblyInfo.cs , 1846
TalkServer/bin/Debug/TalkServer.exe , 9728
TalkServer/bin/Debug/TalkServer.pdb , 17920
TalkServer/Form1.cs , 6618
TalkServer/Form1.resx , 5315
TalkServer/obj/Debug/TalkServer.exe , 9728
TalkServer/obj/Debug/TalkServer.exe.incr , 1716
TalkServer/obj/Debug/TalkServer.Form1.resources , 324
TalkServer/obj/Debug/TalkServer.pdb , 17920
TalkServer/obj/Debug/TalkServer.projdata , 6536
TalkServer/TalkServer.csproj , 4411
TalkServer/TalkServer.csproj.user , 1773
TalkServer/TalkServer.sln , 916
TalkServer/TalkServer.suo , 7168
没有账号? 忘记密码?

社交账号快速登录