C#实现Socket客户端
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 SocketClient { public partial class Form1 : Form { public Form1() { InitializeComponent();//初始化部件 } Socket Socket_0;//声明一个Socket; Thread Thread_0; //声明一个Thread线程 private void btn_Connect_Click(object sender, EventArgs e)//点击连接事件 { if (btn_Connect.Text=="连接") { try { IPAddress IPAddress_0 = IPAddress.Parse(this.tbox_IP.Text.Trim()); //将输入框内容转换为IPAddress类型 IPEndPoint IPEndPoint_0 = new IPEndPoint(IPAddress_0, int.Parse(tbox_Port.Text.Trim()));//声明一个IPEndPoint(IP+端口号) Socket_0 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); this.tbox_Message.AppendText("正在连接服务器中..."+"\r\n"); Socket_0.Connect(IPEndPoint_0);//连接服务器 this.tbox_Message.AppendText("连接成功" + "\r\n");//tbox_Message中提示<连接成功>; btn_Connect.Text = "断开"; Thread_0 = new Thread(thrRcvMessage); Thread_0.IsBackground = true;//后台线程; Thread_0.Start(); } catch (Exception ex) { this.tbox_Message.AppendText("连接程序异常:" + ex.Message + "\r\n");//tbox_Message中提示<连接失败+失败信息>; return; } } else if(btn_Connect.Text=="断开") { Socket_0.Close();//断开服务器连接; this.tbox_Message.AppendText("已断开" + "\r\n");//提示信息<已断开> btn_Connect.Text = "连接"; Thread_0.Abort(); } } private void thrRcvMessage()//接收数据的后台线程 { while (true) { try { byte[] abyRcv = new byte[1024]; int iLength = Socket_0.Receive(abyRcv); if (iLength == 0)//表示客户端已经断开 { Invoke(new Action(() => this.tbox_Message.AppendText("服务器连接断开!" + "\r\n")));//提示<服务器连接断开> Invoke(new Action(() => Socket_0.Close()));//关闭Socket Invoke(new Action(() => this.btn_Connect.Text = "连接"));//修改连接按钮text break; } else { string strRcv = Encoding.UTF8.GetString(abyRcv, 0, iLength);//编码转换:字节数组→字符串 Invoke(new Action(() => this.tbox_Message.AppendText("接收:" + strRcv + "\r\n")));//提示信息:接收内容 Invoke(new Action(() => this.tbox_RcvData.Text = ""));//接收框内容清空 Invoke(new Action(() => this.tbox_RcvData.AppendText(strRcv)));//接收框内容输出 } } catch (Exception) { Invoke(new Action(() => this.tbox_Message.AppendText("接收程序异常!" + "\r\n")));//提示<>; return; } } } private void btn_Send_Click(object sender, EventArgs e)//点击发送事件 { try { if (btn_Connect.Text == "断开")//通信已连接 { byte[] abySend = Encoding.UTF8.GetBytes(tbox_SendData.Text.Trim());//将tbox_SendData中的数据转化为字节类数组; Socket_0.Send(abySend);//发送数据 tbox_Message.AppendText("发送:" + tbox_SendData.Text + "\r\n");//信息显示:<发送数据> } else { tbox_Message.AppendText("服务器未连接!" + "\r\n"); } } { catch (Exception ee) tbox_Message.AppendText("发送程序异常!" + ee.Message + "\r\n"); return; } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2023-09-18 ABB机器人EIP从站配置( OmniCore版) _ WAN口为例