Server端
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace ServerTest { public partial class FrmServer : Form { public FrmServer() { InitializeComponent(); } private void btnlisten_Click(object sender, EventArgs e) { try { //点击开始监听时 在服务端创建一个负责监听IP和端口号的Socket Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Any; //创建对象端口 IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtport.Text)); socketWatch.Bind(point);//绑定端口号 ShowMsg("监听成功!"); socketWatch.Listen(10);//设置监听 //创建监听线程 Thread thread = new Thread(Listen); thread.IsBackground = true; thread.Start(socketWatch); } catch { } } /// <summary> /// 等待客户端的连接 并且创建与之通信的Socket /// </summary> Socket socketSend; void Listen(object o) { try { Socket socketWatch = o as Socket; while (true) { socketSend = socketWatch.Accept();//等待接收客户端连接 ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功!"); //开启一个新线程,执行接收消息方法 Thread r_thread = new Thread(Received); r_thread.IsBackground = true; r_thread.Start(socketSend); } } catch { } } /// <summary> /// 服务器端不停的接收客户端发来的消息 /// </summary> /// <param name="o"></param> void Received(object o) { try { Socket socketSend = o as Socket; while (true) { //客户端连接服务器成功后,服务器接收客户端发送的消息 byte[] buffer = new byte[1024 * 1024 * 3]; //实际接收到的有效字节数 int len = socketSend.Receive(buffer); if (len == 0) { break; } string str = Encoding.UTF8.GetString(buffer, 0, len); ShowMsg(socketSend.RemoteEndPoint + ":" + str); } } catch { } } /// <summary> /// 服务器向客户端发送消息 /// </summary> /// <param name="str"></param> void Send(string str) { byte[] buffer = Encoding.UTF8.GetBytes(str); socketSend.Send(buffer); } void ShowMsg(string msg) { listBox1.Items.Add(msg + " "); } private void btnsend_Click(object sender, EventArgs e) { Send(textBox2.Text.Trim()); } private void FrmServer_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; } } }
Client
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace ClintTest { public partial class FrmClint : Form { public FrmClint() { InitializeComponent(); } Socket socketSend; private void btnsend_Click(object sender, EventArgs e) { try { string msg = txtmsg.Text.Trim(); byte[] buffer = new byte[1024 * 1024 * 3]; buffer = Encoding.UTF8.GetBytes(msg); socketSend.Send(buffer); } catch { } } private void btnconnect_Click(object sender, EventArgs e) { try { //创建客户端Socket,获得远程ip和端口号 socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse(txtip.Text); IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtport.Text)); socketSend.Connect(point); ShowMsg("连接成功!"); //开启新的线程,不停的接收服务器发来的消息 Thread c_thread = new Thread(Received); c_thread.IsBackground = true; c_thread.Start(); } catch (Exception) { ShowMsg("IP或者端口号错误..."); } } void ShowMsg(string str) { listBox1.BeginInvoke( new Action(delegate { listBox1.Items.Add(str + " "); //Thread th = new Thread(Search); //th.IsBackground = true; //th.Priority = ThreadPriority.Lowest; //th.Start(); }) ); } void AddMsg() { } /// <summary> /// 接收服务端返回的消息 /// </summary> void Received() { while (true) { try { byte[] buffer = new byte[1024 * 1024 * 3]; //实际接收到的有效字节数 int len = socketSend.Receive(buffer); if (len == 0) { break; } string str = Encoding.UTF8.GetString(buffer, 0, len); ShowMsg(socketSend.RemoteEndPoint + ":" + str); } catch { } } } private void FrmClint_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; } } }