<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>TCP on 豆子技术站</title><link>https://blog.91demo.top/tags/tcp/</link><description>Recent content in TCP on 豆子技术站</description><generator>Hugo -- 0.155.1</generator><language>zh-cn</language><lastBuildDate>Sat, 06 Jan 2018 12:40:16 +0800</lastBuildDate><atom:link href="https://blog.91demo.top/tags/tcp/index.xml" rel="self" type="application/rss+xml"/><item><title>实战笔记：知识真的就是金钱，聊聊我的局域网调试工具</title><link>https://blog.91demo.top/debug-tcp/</link><pubDate>Sat, 06 Jan 2018 12:40:16 +0800</pubDate><guid>https://blog.91demo.top/debug-tcp/</guid><description>&lt;p&gt;在“豆子工具”的所有功能中，&lt;strong&gt;局域网调试工具（TCP/UDP/WebSocket）&lt;/strong&gt; 并不是受众最广的，但它却是我最引以为傲的一个。&lt;/p&gt;
&lt;p&gt;因为它让我真切地体会到了一句话：&lt;strong&gt;知识就是力量，知识就是金钱。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="缘起把调试器揣进口袋"&gt;缘起：把调试器揣进口袋&lt;/h3&gt;
&lt;p&gt;做嵌入式开发或者网络协议调试的人都知道，以往测试局域网通信，必须背着电脑，接上串口线或网线，蹲在机柜旁守着。我当时就在想：既然微信小程序已经开放了网络通信的能力，为什么我不能做一个随身携带的调试器呢？&lt;/p&gt;
&lt;p&gt;于是，我深度调用了小程序的 &lt;code&gt;wx.createTCPSocket&lt;/code&gt;、&lt;code&gt;wx.createUDPSocket&lt;/code&gt; 和 &lt;code&gt;WebSocket&lt;/code&gt; API，在“豆子工具”里构建了一个完整的网络测试模块。它支持：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;十六进制（Hex）与 ASCII 码切换&lt;/li&gt;
&lt;li&gt;实时数据日志展示&lt;/li&gt;
&lt;li&gt;局域网内稳定的数据收发&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="TCP调试工具" loading="lazy" src="https://blog.91demo.top/images/wander/tool-tcp.webp"&gt;&lt;/p&gt;
&lt;h3 id="变现从技术分享到第一桶金"&gt;变现：从技术分享到“第一桶金”&lt;/h3&gt;
&lt;p&gt;工具做成后，我并没有藏着掖着，而是把实现原理和核心逻辑整理成文，发布到了&lt;strong&gt;微信开发者社区&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;没过多久，一位用户通过那篇文章联系到了我。他在工业自动化领域遇到了一个难题：需要一套能够定制化采集设备数据的微信小程序工具，而协议正是基于 &lt;strong&gt;Modbus/TCP&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;由于我的“豆子工具”已经打好了坚实的底层基础，我对原有的 TCP 调试模块进行了针对性的修改，迅速就适配出了满足他实际业务场景的采集方案。&lt;/p&gt;
&lt;p&gt;虽然这笔订单带来的“第一桶金”数额并不算惊人，但它对我的意义非凡。它验证了一个逻辑：&lt;strong&gt;当你把一个细分领域的工具做到极致，并愿意分享出去时，价值自然会找上门来。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="技术实现"&gt;技术实现&lt;/h3&gt;
&lt;p&gt;这个工具是纯小程序实现，它调用微信小程序的网络API。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;doConnServer() {
const that = this;
wx.getNetworkType({
success(res) {
const networkType = res.networkType
if (networkType !== &amp;#39;wifi&amp;#39;) {
wx.showToast({
title: &amp;#39;请打开WIFI&amp;#39;,
})
return
}
that.connTcp();
}
});
},
connTcp() {
const that = this;
if (!utils.isEmpty(t)) {
t.offMessage()
t.offConnect()
t.offError()
t.offClose()
t.close()
t = null;
that.setData({
isConn: false,
tips: &amp;#34;关闭成功&amp;#34;
})
wx.showToast({
title: &amp;#39;关闭成功&amp;#39;,
})
return
} else {
let ip = that.data.ip;
let port = that.data.port;
if (!utils.isValidIP(ip)) {
wx.showToast({
title: &amp;#39;无效IP地址&amp;#39;,
})
return
}
if (!utils.isPrivateIP(ip)) {
wx.showToast({
title: &amp;#39;请使用私有IP&amp;#39;,
})
return
}
if (utils.containInvalidPort(port)) {
wx.showToast({
title: &amp;#39;非法端口&amp;#39;,
})
return
}
t = wx.createTCPSocket()
t.onError(that.tErr)
t.onConnect(that.tConn)
t.onMessage(that.tMsg)
t.onClose(that.tClose)
t.connect({
address: ip,
port: port,
timeout: 3,
})
}
},
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这是部分核心TCP代码，它是TCP创建连接的核心代码。完整代码请从下面地址中的豆子碎片小程序内下载：&lt;a href="https://91demo.top/tools/"&gt;https://91demo.top/tools/&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>