Socket通讯
一、
创建Windows 窗体应用(.NET Framework)项目
1.将窗体 StartPosition 设置为 CenterScreen
2.Test设置为:基于Scoket实现TCP服务器
后台代码:
public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load += FrmTCPServer_Load; } private void FrmTCPServer_Load(object sender, EventArgs e) { this.lst_Rcv.Columns[1].Width = this.lst_Rcv.ClientSize.Width - this.lst_Rcv.Columns[0].Width; } /* 服务器端程序的编写步骤: 第一步:调用socket()函数创建一个用于通信的套接字 第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现 第三步:调用listen()函数使用套接字成为一个监听套接字。 第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。 第五步:处理客户端的连接请求。 第六步:终止连接 */ //声明一个Socket对象 private Socket soketServer; /// <summary> /// 开启服务 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_StartService_Click(object sender, EventArgs e) { //第一步:调用socket()函数创建一个用于通信的套接字 soketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现 IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(this.txt_IP.Text), int.Parse(this.txt_Port.Text)); try { soketServer.Bind(ipe); } catch (Exception ex) { //写入日志 AddLog(2, "服务器开启失败 "+ex.Message); return; } //第三步:调用listen()函数使用套接字成为一个监听套接字。 soketServer.Listen(10); //创建一个监听多线程 Task.Run(new Action(() => { CheckListening(); })); AddLog(0, "服务器开启成功"); this.btn_StartService.Enabled = false; } /// <summary> /// 检查监听的线程方法体 /// </summary> private void CheckListening() { while (true) { //第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。 Socket socketCient = soketServer.Accept(); Task.Run(new Action(() => { ReciveMessge(socketCient); })); } } /// <summary> /// 接受客户端数据的方法 /// </summary> /// <param name="socketCient"></param> private void ReciveMessge(Socket socketCient) { while (true) { //创建一个缓冲区 byte[] buffer = new byte[1024 * 1024 * 10]; int length = -1; //第五步:处理客户端的连接请求。 length = socketCient.Receive(buffer); } } #region 接受信息的方法 //当前时间属性 private string CurrentTime { get { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } } //记录日志 private void AddLog(int index,string info) { if (!this.lst_Rcv.InvokeRequired) { ListViewItem lst = new ListViewItem(" " + CurrentTime, ""); lst.SubItems.Add(info); lst_Rcv.Items.Insert(0, lst); } else { Invoke(new Action(()=> { ListViewItem lst = new ListViewItem(" " + CurrentTime, ""); lst.SubItems.Add(info); lst_Rcv.Items.Insert(0, lst); })); } } #endregion }
作者:chenze 出处:https://www.cnblogs.com/chenze-Index/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |