https://www.cnblogs.com/yangfengwu/p/11192594.html

自行调整页面

连接上以后主动发个数据

namespace TCPClient
{
public partial class Form1 : Form
{
private TcpClient myTcpClient = null;// TcpClient Thread ConnectThread;//连接线程 string ipAddress;//记录ip地址
int Port = ;//端口号 private NetworkStream networkstrem = null;//获取网络数据用
private Thread ReceiveThread;//接收消息线程
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
getIPAddress();//刚才写的那个函数.获取电脑IP,并显示在下拉框
} /// <获取本机 IP 地址>
///
/// </summary>
/// <returns></returns>
private void getIPAddress()
{
IPAddress[] hostipspool = Dns.GetHostAddresses("");//获取本机所以IP
comboBox1.Items.Clear();//清除下拉框里面的内容
foreach (IPAddress ipa in hostipspool)
{
if (ipa.AddressFamily == AddressFamily.InterNetwork)
{
comboBox1.Items.Add(ipa.ToString());//下拉框加入IP数据
comboBox1.SelectedIndex = comboBox1.Items.Count > ? : -;//显示第一个
}
}
} private void ConnectMethod()
{
myTcpClient = new TcpClient(); //实例化myTcpClient
try
{
myTcpClient.Connect(ipAddress, Port);//连接服务器 networkstrem = myTcpClient.GetStream();//获取数据流操作实例.(给的方法就是这个......) try
{
networkstrem.Write(new byte[] { 0x31, 0x32, 0x33 }, ,);//发送数据,"123"
}
catch
{ } //连接上以后往下执行
Invoke((new Action(() =>
{
button1.Text = "断开";
})));
}
catch (Exception)
{
//异常处理函数
Invoke((new Action(() =>
{
button1.Text = "连接";
})));
try { myTcpClient.Close(); }catch { } //关闭连接
}
} //连接和断开按钮
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "连接")
{
ipAddress = comboBox1.Text.ToString();//获取IP地址
Port = Convert.ToInt32(textBox1.Text.ToString());//获取端口号 ConnectThread = new Thread(ConnectMethod);//创建任务
ConnectThread.Start();//启动任务
}
else
{
try { myTcpClient.Close(); } catch { } //关闭连接
Invoke((new Action(() =>
{
button1.Text = "连接";
})));
}
} private void comboBox1_DropDown(object sender, EventArgs e)
{
getIPAddress();//刚才写的那个函数
}
}
}

测试

现在写接收数据,然后显示

        /// <接收消息线程>
///
/// </summary>
private void ReceiveDataMethod()
{
int RecvCnt = ;
byte[] recvBytes = new byte[];
while (true)
{
try
{
RecvCnt = networkstrem.Read(recvBytes, , recvBytes.Length);//获取数据
Invoke((new Action(() =>
{
//new ASCIIEncoding().GetString(recvBytes, 0, RecvCnt)//byte转化为字符串
textBox2.AppendText(new ASCIIEncoding().GetString(recvBytes, , RecvCnt));//追加显示
})));
}
catch (Exception ex)
{
//异常处理函数
Invoke((new Action(() =>
{
button1.Text = "连接";
})));
try { ReceiveThread.Abort(); }//销毁任务
catch { }
try { networkstrem.Dispose(); }//释放资源
catch { }
try { myTcpClient.Close(); }//关闭TCP
catch { }
}
}
}

测试

关闭窗体的时候,关闭下TCP

再优化一下,,检测服务器主动断开

//检测服务器是主动断开
if ((myTcpClient.Client.Poll(, SelectMode.SelectRead)) && (myTcpClient.Client.Available == ))
{
myTcpClient.Close();//关闭以后,后面程序会引发异常
}

测试

现在写发送,自行双击那个按钮,,,让软件添加上那个按钮的点击事件

 byte[] sendbyte = Encoding.Default.GetBytes(textBox3.Text.ToString());//获取发送的数据,转为byte
if (sendbyte.Length > )
{
try { networkstrem.Write(sendbyte, , sendbyte.Length); }//发送数据
catch (Exception) { MessageBox.Show("请检查连接", "提示!"); }
}
else
{
MessageBox.Show("数据不能为空", "提示!");
}

测试

然后做个  Hex发送

        /// <字符串转16进制格式,不够自动前面补零>
/// "0054FF" ==> 16进制 0x00 0x54 0xFF
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
private static byte[] strToToHexByte(String hexString)
{
int i;
bool Flag = false; hexString = hexString.Replace(" ", "");//清除空格
if ((hexString.Length % ) != )
{
Flag = true;
}
if (Flag == true)
{
byte[] returnBytes = new byte[(hexString.Length + ) / ]; try
{
for (i = ; i < (hexString.Length - ) / ; i++)
{
returnBytes[i] = Convert.ToByte(hexString.Substring(i * , ), );
}
returnBytes[returnBytes.Length - ] = Convert.ToByte(hexString.Substring(hexString.Length - , ).PadLeft(, ''), ); }
catch
{
for (i = ; i < returnBytes.Length; i++)
{
returnBytes[i] = ;
}
MessageBox.Show("超过16进制范围A-F,已初始化为0", "提示");
}
return returnBytes;
}
else
{
byte[] returnBytes = new byte[(hexString.Length) / ];
try
{
for (i = ; i < returnBytes.Length; i++)
{
returnBytes[i] = Convert.ToByte(hexString.Substring(i * , ), );
}
}
catch
{
for (i = ; i < returnBytes.Length; i++)
{
returnBytes[i] = ;
}
MessageBox.Show("超过16进制范围A-F,已初始化为0", "提示");
}
return returnBytes;
}
}

测试

好了,hex显示  和清除 大家自己搞定哈,,,

https://www.cnblogs.com/yangfengwu/p/11192618.html

20-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 加入数据通信的更多相关文章

  1. 19-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 连接和断开

    https://www.cnblogs.com/yangfengwu/p/11130428.html 渐渐的看过去,,,好多节了... 这节做一个C# TCP客户端 新建项目啥子的就不详细截图写了,自 ...

  2. 24-ESP8266 SDK开发基础入门篇--Android TCP客户端.控制 Wi-Fi输出PWM的占空比,调节LED亮度

    https://www.cnblogs.com/yangfengwu/p/11204436.html 刚才有人说需要点鸡汤.... 我想想哈;我还没问关于哪方面的鸡汤呢!!! 我所一直走的路线 第一: ...

  3. 21-ESP8266 SDK开发基础入门篇--C# TCP客户端 , 控制LED亮灭

    https://www.cnblogs.com/yangfengwu/p/11192603.html 由于是台式机,,没有插无线网卡...所以呢我就用调试助手监控下数据 后期让WIFI连接路由器的时候 ...

  4. 1-ESP8266 SDK开发基础入门篇--开发环境搭建

    因为今天终于做好了自己的另一块工控板,所以我就开始写基础公开篇的内容,希望自己小小的努力能够帮到大家 自己做的另一块板子 https://www.cnblogs.com/yangfengwu/cate ...

  5. 25-ESP8266 SDK开发基础入门篇--控制WIFI连接路由器

    https://www.cnblogs.com/yangfengwu/p/11324411.html 说个事情,现在SDK的版本已经出到3.0了,但是我还是使用2.0 如果只是为了学习研究   选择3 ...

  6. 29-ESP8266 SDK开发基础入门篇--编写TCP 客户端程序(Lwip RAW模式,非RTOS版,精简入门)

    https://www.cnblogs.com/yangfengwu/p/11456667.html 由于上一节的源码长时间以后会自动断开,所以再做这一版非RTOS版的,咱直接用lua源码里面别人写的 ...

  7. 18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED

    https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮  F1 4C为CRC高位和低位 ...

  8. 16-ESP8266 SDK开发基础入门篇--TCP 服务器 非RTOS运行版,串口透传(串口回调函数处理版)

    https://www.cnblogs.com/yangfengwu/p/11105466.html 其实官方给的RTOS的版本就是在原先非RTOS版本上增加的 https://www.cnblogs ...

  9. 28-ESP8266 SDK开发基础入门篇--编写wifi模块TCP 客户端程序(官方API版,非RTOS版)

    https://www.cnblogs.com/yangfengwu/p/11432795.html 注:这节实现的功能是WIFI模块作为TCP 客户端,连接咱的TCP服务器,然后实现透传 本来想着做 ...

随机推荐

  1. 单点logi,n

    using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; u ...

  2. Oracle PLSQL数据导出csv的案例

    之前项目运维人员碰到一个问题,需要写一个存储过程,把数据导出为csv文件,查了一些资料,帮他写成了一个PLSQL,今天拿出来分享一下,不足之处,欢迎指教. 数据背景:  用到两张表,一张存放单位组织名 ...

  3. vue-cli3使用svg

    (根据网上教程实操,仅作个记录) 执行命令安装插件 npm install svg-sprite-loader --save-dev 在vue.config.js中,添加配置 module.expor ...

  4. python错误日志记录工具,解决项目排错问题

    我们写项目的时候难免会遇到代码报错的问题,遇到这样的问题了如何快速的定位问题并解决问题呢? 我今天来整理了利用python只带的工具来解决这个问题,我能需要使用的库有: logging os 这些都是 ...

  5. sqlserver数据,将一行某一列字符串的值用“_”分割分别填充到这一行的其他列

    分割字符到列DECLARE @a VARCHAR(10)SET @a ='00G-2-1102'SELECT CHARINDEX('-',@a,CHARINDEX('-',@a))SELECT CHA ...

  6. Github 上 10 个值得学习的 Springboot 开源项目

    Spring Boot 几乎继承了所有 Spring 框架的优点,同时还可以让项目的配置更简化.编码更简化.部署更方便.近两年受到很多开发者的追捧,也是火热的不行! 下面给大家整理了 10 个 Git ...

  7. 执行chmod -R 777 / 补救

    执行后千万不要退出当前窗口!!! 在自己的虚拟机上设置某个站的权限的时候,原来应该是chmod -R 777 ./*  结果少按了个点,执行了chmod -R 777 /*  因为执行时间超出自己的预 ...

  8. Kali下的内网劫持(二)

    前一小节说到在Kali下可以进行捕获客户端的图片,那么同样的,客户端访问的网页也是可以捕获的: . 以上可以看出监听完毕,那么在被监听端访问阿里云的一个网站: 在监听端用urlsnart这个工具进行捕 ...

  9. UPUPW和ThinkPHP安装配置

    去年弄过,今年弄起来就简单多了. 参考的是<ThinkPHP实战>

  10. db2 mysql oracle 邮件 tomcat ssh telnet ftp samba 账号密码

    db2 mysql oracle 邮件 tomcat ssh telnet ftp samba 账号密码 检测