当前位置:首页 » 《随便一记》 » 正文

做了一款 TCP/IP 调试工具

17 人参与  2022年11月07日 10:33  分类 : 《随便一记》  评论

点击全文阅读


大家好,我是青空。

由于现在工作上,有很多socket交互的情况,自己在网上找了一些工具, 但是要么不好用,要么就是只能使用几天,就需要收费了。 青空就想着自己搞一个好了, 针对自己的应用场景,直接定制。

那就先上个图吧
image.png

已实现的功能

目前已经完成了第一个版本。功能点如下:

根据TCP/IP 协议链接到服务端通过 ASCII、Hex 两种编码格式进行消息互通格式化显示消息发送、接收数据自动重发命令记录命令发送历史

核心代码

在这个工具中,最核心的不过是在于,建立socket链接,然后进行消息的接收和发送。

建立socket的过程,先确定 TCP 服务端IP和端口是否准确,然后再通过 socket api 进行连接。建立连接之后,进行状态的改变,启动接收消息的线程。

var ipString = cbServerIp.Text.ToString().Trim();var ipPort = cbServerPort.Text.ToString().Trim();if (string.IsNullOrWhiteSpace(ipString) || string.IsNullOrWhiteSpace(ipPort)){    MessageBox.Show("请先输入服务器IP和端口号");    return;}if (Connected == false){    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);    IP = IPAddress.Parse(ipString);    port = Convert.ToInt32(ipPort);    remoteEndPoint = new IPEndPoint(IP, port);    try    {        socket.Connect(remoteEndPoint);        Connected = true;        btnConnect.Text = "断开服务器";        connectStatus.Text = "This socket is connected";        connectStatus.ForeColor = Color.Green;    }    catch (SocketException ex)    {        Connected = false;        btnConnect.Text = "连接服务器";        connectStatus.Text = "This socket is not connected";        connectStatus.ForeColor = Color.Red;    }    Thread thread = new Thread(ReceiveMsg);    thread.IsBackground = true;    thread.Start();}else{    Connected = false;    btnConnect.Text = "连接服务器";    socket.Disconnect(false);    socket.Close();    connectStatus.Text = "This socket is not connected";    connectStatus.ForeColor = Color.Red;}

接下来就介绍一下,我们是如何接收消息的,接收消息的过程我们是在循环遍历读取 socket 连接中的消息,然后展示到我们的接收区的文本框中。

while (Connected){    StringBuilder sb = new StringBuilder("[接收] ");    if (closeForm == false)    {        try        {            if (Connected == false)            {                return;            }            byte[] data = new byte[1024];            var n = socket.Receive(data);            if (n > 0)            {                byte[] buf = new byte[n];                Array.Copy(data, 0, buf, 0, n);                if (chbShowTime.Checked)                {                    sb.Append("[");                    var now = DateTime.Now;                    sb.Append(now.ToString("yyyy-MM-dd"));                    sb.Append(" ");                    sb.Append(now.ToString("HH:mm:ss:fff"));                    sb.Append("] ");                }                if (rdbRevASCII.Checked)                {                    sb.Append(Encoding.ASCII.GetString(buf));                }                if (rdbRevHex.Checked)                {                    foreach (var b in buf)                    {                        sb.Append(b.ToString("X2") + " ");                    }                }                if (chbNewLine.Checked)                {                    sb.Append("\n");                }            }        }        catch (SocketException ex)        {            Connected = false;            btnConnect.Text = "连接服务器";            MessageBox.Show("与服务器断开 " + ex.Message, "错误提示");        }        catch (Exception ex)        {            Connected = false;            btnConnect.Text = "连接服务器";            showMsg("接收数据异常,可能已经断联");        }    }    showMsg(sb.ToString());}

通常我们会把UI线程和业务线程给分离开,这是由于如果不进行分离的话,如果业务线程卡住的话, UI线程会出现未响应的状态。那我们为了能够在UI线程显示数据,我们就需要通过委托调用的方式能够让UI进行正常运行, 代码如下。

if (this.InvokeRequired){    ReceiveMsgDele receiveMsgDele = new ReceiveMsgDele(showMsg);    rtbRevText.Invoke(receiveMsgDele, new object[] { msg });}else{    rtbRevText.AppendText(msg);}

下一步

在目前的功能基础上,增加定制化的功能, 比如持久化消息的发送历史,批量发送命令,有交互性的重复发送命令等。

总结

今天青空给大家介绍了最近自己开发的 TCP/IP 的调试工具,实现了互通消息的功能, 更多其他的功能在持续开发中,对这个感兴趣的话,可以联系我。暂时不对齐进行开源,等到代码完善了之后再考虑开源的事项。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/47194.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 俞欢:结局+番外免费品鉴穿成女配,但是万人迷:结局+番外评价五颗星
  • 姐姐被害难产身亡后,我重生七零杀疯了惊天黑幕_杨雪林建志诚未删减_小说后续在线阅读_无删减免费完结_
  • 终章小说鹿言裴禹完结篇(爱你的事当做秘密)已更新+延伸(鹿言裴禹)清爽版
  • 妻子用十根钢钉迎接女儿回家,我不要她了完结全文_瑶瑶裴璇苏大强完结全文_小说后续在线阅读_无删减免费完结_
  • (陈晃陈娩)姐姐,是我的错陈晃陈娩延伸在线下载无广告章节清单
  • 梧桐影里别经年(姜岳霆裴智秀)_梧桐影里别经年(姜岳霆裴智秀)
  • 被污蔑偷换学霸高考成绩后,我杀疯了一口气看完_周启书瑶快手热门_小说后续在线阅读_无删减免费完结_
  • 黑月光钓遍全界男主都到我碗里来(桑泠贺苏言)_黑月光钓遍全界男主都到我碗里来(桑泠贺苏言)
  • 宋伊人骆屿小说完本章节前文+全篇阅读(暗香浮动月黄昏)连载中
  • 夫君是太监又怎么了?(安生阿梅)_夫君是太监又怎么了?(安生阿梅)
  • 穿成资本家大小姐,卷走家产去下乡(宋夕颜宋佳佳)全书免费_(宋夕颜宋佳佳)穿成资本家大小姐,卷走家产去下乡后续(宋夕颜宋佳佳)
  • 全书浏览他装失忆骗我三年,我装失忆送他进去(沈砚司苏念苏虞宁)_他装失忆骗我三年,我装失忆送他进去(沈砚司苏念苏虞宁)全书结局

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1