C#开发socket通信winfrom

news/2024/11/17 3:55:02/文章来源:https://www.cnblogs.com/wuchengyang/p/18304852

UI界面:

 

实现:

服务端Server :开启服务端按钮点击事件

 Thread threadWatch = null; //负责监听客户端的线程Socket socketWatch = null;  //负责监听客户端的套接字private void button3_Click(object sender, EventArgs e){try{//定义一个套接字用于监听客户端发来的信息  包含3个参数(IP4寻址协议,流式连接,TCP协议)socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//服务端发送信息 需要1个IP地址和端口号IPAddress ipaddress = IPAddress.Parse(this.txtIPServer.Text.Trim()); //获取文本框输入的IP地址//将IP地址和端口号绑定到网络节点endpoint上IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(this.txtPortServer.Text.Trim())); //获取文本框上输入的端口号//监听绑定的网络节点
         socketWatch.Bind(endpoint);//将套接字的监听队列长度限制为20socketWatch.Listen(20);//创建一个监听线程threadWatch = new Thread(WatchConnecting);//将窗体线程设置为与后台同步threadWatch.IsBackground = true;//启动线程
         threadWatch.Start();//启动线程后 txtMsg文本框显示相应提示txtMsgServer.AppendText("开始监听客户端传来的信息!" + "\r\n");this.button3.Enabled = false;}catch (Exception ex){txtMsgServer.AppendText("服务端启动服务失败!" + "\r\n");this.button3.Enabled = true;} }//创建一个负责和客户端通信的套接字Socket socConnection = null;/// <summary>/// 监听客户端发来的请求/// </summary>private void WatchConnecting(){while (true)  //持续不断监听客户端发来的请求
        {socConnection = socketWatch.Accept();txtMsgServer.AppendText("客户端连接成功! " + "\r\n");//创建一个通信线程ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);Thread thr = new Thread(pts);thr.IsBackground = true;//启动线程
            thr.Start(socConnection);}}/// <summary>/// 接收客户端发来的信息/// </summary>/// <param name="socketClientPara">客户端套接字对象</param>private void ServerRecMsg(object socketClientPara){Socket socketServer = socketClientPara as Socket;while (true){//创建一个内存缓冲区 其大小为1024*1024字节  即1Mbyte[] arrServerRecMsg = new byte[1024 * 1024];try{//将接收到的信息存入到内存缓冲区,并返回其字节数组的长度int length = socketServer.Receive(arrServerRecMsg);//将机器接受到的字节数组转换为人可以读懂的字符串string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length);//将发送的字符串信息附加到文本框txtMsg上txtMsgServer.AppendText("客户端 " + GetCurrentTime() + "\r\n" + strSRecMsg + "\r\n");}catch (Exception ex){txtMsgServer.AppendText("客户端已断开连接!" + "\r\n");break;}}}/// <summary>/// 获取当前系统时间的方法/// </summary>/// <returns>当前时间</returns>private DateTime GetCurrentTime(){DateTime currentTime = new DateTime();currentTime = DateTime.Now;return currentTime;}

服务端发送消息按钮点击事件:

 private void button1_Click(object sender, EventArgs e){//调用 ServerSendMsg方法  发送信息到客户端ServerSendMsg(this.txtSendMsgServer.Text.Trim());this.txtSendMsgServer.Clear();}/// <summary>/// 发送信息到客户端的方法/// </summary>/// <param name="sendMsg">发送的字符串信息</param>private void ServerSendMsg(string sendMsg){try{//将输入的字符串转换成 机器可以识别的字节数组byte[] arrSendMsg = Encoding.UTF8.GetBytes(sendMsg);//向客户端发送字节数组信息
         socConnection.Send(arrSendMsg);//将发送的字符串信息附加到文本框txtMsg上txtMsgServer.AppendText("服务器 " + GetCurrentTime() + "\r\n" + sendMsg + "\r\n");}catch (Exception ex){txtMsgServer.AppendText("客户端已断开连接,无法发送信息!" + "\r\n");}}

 

客户端Client :开启客户端按钮点击事件

        //创建 1个客户端套接字 和1个负责监听服务端请求的线程Socket socketClient = null;Thread threadClient = null;private void button4_Click(object sender, EventArgs e){//定义一个套字节监听  包含3个参数(IP4寻址协议,流式连接,TCP协议)socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//需要获取文本框中的IP地址IPAddress ipaddress = IPAddress.Parse(this.txtIPClient.Text.Trim());//将获取的ip地址和端口号绑定到网络节点endpoint上IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(this.txtPortClient.Text.Trim()));//这里客户端套接字连接到网络节点(服务端)用的方法是Connect 而不是Bindtry{socketClient.Connect(endpoint);this.txtMsgClient.AppendText("客户端连接服务端成功!" + "\r\n");this.button4.Enabled = false;//创建一个线程 用于监听服务端发来的消息threadClient = new Thread(RecMsg);//将窗体线程设置为与后台同步threadClient.IsBackground = true;//启动线程
                threadClient.Start();}catch (Exception ex){this.txtMsgClient.AppendText("远程服务端断开,连接失败!" + "\r\n");} }/// <summary>/// 接收服务端发来信息的方法/// </summary>private void RecMsg(){while (true) //持续监听服务端发来的消息
            {try{//定义一个1M的内存缓冲区 用于临时性存储接收到的信息byte[] arrRecMsg = new byte[1024 * 1024];//将客户端套接字接收到的数据存入内存缓冲区, 并获取其长度int length = socketClient.Receive(arrRecMsg);//将套接字获取到的字节数组转换为人可以看懂的字符串string strRecMsg = Encoding.UTF8.GetString(arrRecMsg, 0, length);//将发送的信息追加到聊天内容文本框中txtMsgClient.AppendText("服务端 " + GetCurrentTime() + "\r\n" + strRecMsg + "\r\n");}catch (Exception ex){this.txtMsgClient.AppendText("远程服务器已中断连接!" + "\r\n");this.button4.Enabled = true;break;}}}

断开按钮点击事件:

        /// <summary>/// 断开客户端/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button5_Click(object sender, EventArgs e){socketClient.Close();this.txtMsgClient.AppendText("已关闭连接" + "\r\n");}

客户端发送消息按钮点击事件:

        private void button2_Click(object sender, EventArgs e){//调用ClientSendMsg方法 将文本框中输入的信息发送给服务端ClientSendMsg(this.txtSendMsgClient.Text.Trim());this.txtSendMsgClient.Clear(); }/// <summary>/// 发送字符串信息到服务端的方法/// </summary>/// <param name="sendMsg">发送的字符串信息</param>private void ClientSendMsg(string sendMsg){try{//将输入的内容字符串转换为机器可以识别的字节数组byte[] arrClientSendMsg = Encoding.UTF8.GetBytes(sendMsg);//调用客户端套接字发送字节数组
                socketClient.Send(arrClientSendMsg );//将发送的信息追加到聊天内容文本框中txtMsgClient.AppendText("客户端 " + GetCurrentTime() + "\r\n" + buffer + "\r\n");}catch (Exception ex){this.txtMsgClient.AppendText("远程服务器已中断连接,无法发送消息!" + "\r\n");}}

 

-------------------------------------------------------------------------------------------自此---------------------------------------------------------------------------------------------------

 

以上是完成socket通信winfrom程序的全部内容

其中socket连接方式有长连接和短连接,并未体现出来

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/744616.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载以太网交换机入门基本功(2)— 初识VLAN

这么方便的VLAN,究竟是用了什么“魔法”做到的呢? 在《交换机入门基本功 -上》提到,交换机在物理层面划分通信区域并产生局域网(Local Area Network, LAN)。局域网具有一个特点:连线拓扑一旦确定,一定时间内不会发生通信区域的变动。在实际通信过程中,广播报文和…

基础知识

主要是怕忘记,就当简单的记事本了,随时补充( 32位&64位 32(x86) 函数参数在函数返回地址上方 64(x64) 前六个参数依次保存在 RDI、RSI、RDX、RCX、R8、R9寄存器中 剩余的保存在栈上 各寄存器主要功能系统调用 步骤 1.加载系统调用号 将系统调用号加载到rax寄存器 2.准备…

NewSQL-TiDB 分布式数据库运维技术从0到1实战入门

一、TiDB简介 TiDB 是一种新型的分布式数据库,它结合了传统关系型数据库的易用性和 NoSQL 数据库的高性能、可扩展性。作为一款 NewSQL 数据库,TiDB 旨在解决大规模在线事务处理(OLTP)系统的需求,同时支持 JSON、图形等非关系型数据结构。 TiDB 的优势兼容性:TiDB 兼容 M…

W外链有哪些功能?短网址/活码/私信卡片

在当今互联网高速发展的时代,短网址生成平台已经成为网络营销、社交媒体推广以及个人用户分享链接时不可或缺的工具。在众多短网址生成平台中,W外链短网址生成平台凭借其独特的功能和优势,赢得了广大用户的青睐。本文将详细介绍W外链短网址生成平台的核心功能,帮助读者更好…

[FireshellCTF2020]Caas 1

c语言编译器 打开之后看见是个输入框,随便输入然后发现报错是c语言的,尝试输出helloword #include <stdio.h>int main() {printf("Hello, World! \n");return 0; }给我们了一个文件,运行一下编译器没跑了,直接 #include "/flag"报错中漏了flag

网页文件加载失败如何重试

本文由 ChatMoney团队出品 在我们开发网站应用时,我们可能会遇到脚本加载失败的情况,导致脚本加载失败的原因有很多,比如用户的网络问题、终端设备问题、用户浏览器版本等诸多因素。 解决方案 在 JavaScript 中,我们可以创建一个监听来监听脚本加载失败的情况,然后针对加载…

rust各种库

ndarray ndarray 是 NumPy 库中的一个核心数据结构,它是一个用于表示多维数组的对象。ndarray 在存储和操作大型多维数组时非常高效,广泛应用于科学计算、数据分析、机器学习等领域。 在 Rust 开发中,ndarray 库可以作为替代 NumPy 库。 Github 地址:https://github.com/r…

mormot2 api-jwt签名和验签

mormot2 api-jwt签名和验签api-jwt签名和验签 1)根据指定的参数来生成签名2)验证签名并获取参数的值 本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18304797

记一次Burp与NEW_xp_CAPTCHA工具联动爆破验证码

首先下载NEW_xp_CAPTCHA工具 地址:https://github.com/smxiazi 我下载的是大佬直接发布的打包好的环境,包括对应python3.6.6与NEW_xp_CAPTCHA工具脚本下载完后直接点击运行即可本地访问http://127.0.0.1:8899/,看到这个页面,证明没问题然后就是burp导入插件jar。这里要下载…

nginx对访问路径进行限制【部分接口可以内外网访问、剩余接口只可以内网访问】

前言 最近这段时间的项目被查出了安全漏洞、然后做了一些安全措施的整改。整改后、BOSS又提了个很有意思的思路。 涉及到小程序端的请求接口、内外网都可以访问。 涉及到后台管理的请求接口、只允许内网访问。开干开干 由于项目引进了gateway网关、一开始的时候。我…

ASP.NET Core-本地化

1.安装扩展ResXManager用于管理本地化资源文件 2.添加资源文件Resource.resx 使用工具ResXManager增加其他资源文件,具体参考ResXManager使用 3.注册本地化public static class ServiceCollectionExtensions {public static IServiceCollection AddLanguage(this IServiceColl…

vit的自注意力机制的范围

在Vision Transformer (ViT) 中,自注意力机制的范围是指模型在处理图像块时,每个图像块能够与其他哪些图像块进行交互。ViT的自注意力机制具有全局范围,这意味着在自注意力层中,每个图像块都可以与其他所有图像块进行交互,而不管它们在原始图像中的空间位置如何。以下是Vi…