c#通过程序如何通过网口发送和接受数据

c#通过程序如何通过网口发送和接受数据,第1张

socket-client

----------------------------------------------

using System;

using SystemCollectionsGeneric;

using SystemComponentModel;

using SystemData;

using SystemDrawing;

using SystemText;

using SystemWindowsForms;

using SystemNet;

using SystemNetSockets;

using SystemThreading;

namespace socket_client

{

//客户端

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

ControlCheckForIllegalCrossThreadCalls = false;

}

Socket s;//聊天用

Thread th;

//连接

private void button1_Click(object sender, EventArgs e)

{

//步骤1 配置远程服务器信息

IPEndPoint removeServer = new IPEndPoint(IPAddressParse(textBox1Text), intParse(textBox2Text));

//步骤2 创建套接字

s = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp);

//步骤3 套接字连接远程服务器

sConnect(removeServer);

//步骤4 提示连接状态

if (sConnected)

{

label4Text = "连接服务器成功!";

//步骤5 循环接收服务器发来的消息

th = new Thread(new ThreadStart(BB));

thIsBackground = true;

thStart();

}

}

void BB()

{

while (true)

{

byte[] bb = new byte[1024];

int i= sReceive(bb); //接收数据,返回每次接收的字节总数

string removeMsg = EncodingUnicodeGetString(bb,0,i);

if (removeMsg == "CMD--EXIT")//收到的是退出通知

{

label4Text = "无连接";

DialogResult re=MessageBoxShow("服务器已经关闭\n\"确定\"后退出程序,\n\"取消\"继续停留!", "消息提示:", MessageBoxButtonsOKCancel, MessageBoxIconWarning);

MessageBoxShow(reToString());

if (re == DialogResultOK)

{

sendExit();//告诉服务器我退出了

ApplicationExit();

}

return;

}

richTextBox1AppendText(removeMsg+"\n") ;

richTextBox1ScrollToCaret();

}

}

//发送消息

private void button3_Click(object sender, EventArgs e)

{

string msg = "客户端:" + richTextBox2Text;

byte[] bb = EncodingUnicodeGetBytes(msg);

sSend(bb);

richTextBox2Text = "";

richTextBox2Focus();

}

//发送“客户端退出提示”

void sendExit()

{

string cmd = "CMD--EXIT";

byte[] bb = EncodingUnicodeGetBytes(cmd);

sSend(bb);

}

}

}

socket-server

--------------------------------------------------------------

using System;

using SystemCollectionsGeneric;

using SystemComponentModel;

using SystemData;

using SystemDrawing;

using SystemText;

using SystemWindowsForms;

using SystemNet;

using SystemNetSockets;

using SystemThreading;

namespace socket_server

{

//服务器

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

ControlCheckForIllegalCrossThreadCalls = false; //可以调试时,不捕捉控件创建线程错误

}

Thread th;

Socket s1;//监听用

Socket s2;//聊天用

//监听

private void button1_Click(object sender, EventArgs e)

{

IPAddress ip = DnsGetHostEntry(DnsGetHostName())AddressList[0];

//步骤1 创建网络端点IPEndPoint

IPEndPoint myServer = new IPEndPoint(ip, 888);

//步骤2 创建套接字Socket

s1 = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp);

//步骤3 套接字绑定到网络端点

s1Bind(myServer);

label1Text = ip+": 888 \n等待客户端连接";

th = new Thread(new ThreadStart(AA));

thIsBackground = true;

thStart();

}

void AA()

{

//步骤4 监听

s1Listen(5);

//步骤5 接受客户端连接

s2 = s1Accept();

//步骤6 判断连接状态

if (s2Connected)

{

label1Text = "已有客户端连接!";

//步骤7 循环接收客户端消息

while (true)

{

byte[] bb = new byte[1024];

int i= s2Receive(bb);

string removeMsg = EncodingUnicodeGetString(bb,0,i);

if (removeMsg == "CMD--EXIT")//收到的是退出通知

{

label1Text = "客户端已经取消了连接";

return;

}

richTextBox1AppendText( removeMsg+"\n" );

richTextBox1ScrollToCaret();

}

}

}

//停止监听

private void button2_Click(object sender, EventArgs e)

{

sendExit();//告诉客户端

s2Shutdown(SocketShutdownBoth);

s1Close();

thAbort();

label1Text = "无连接";

}

//发送消息

private void button3_Click(object sender, EventArgs e)

{

string msg = "服务器:" + richTextBox2Text;

byte[] bb = EncodingUnicodeGetBytes(msg);

s2Send(bb);

richTextBox2Text = "";

richTextBox2Focus();

}

//发送“服务器退出提示”

void sendExit()

{

string cmd = "CMD--EXIT";

byte[] bb = EncodingUnicodeGetBytes(cmd);

s2Send(bb);

}

}

}

串口是数据透传接口,一般使用串口调试软件的默认 8n11模式就可以,高能的来了:第一点:modbus就是一次用串口连续发多个字节!!!!!就这么简单!!!!

如果想在深入一些,那我再告诉你,第二点:连续发出的多个字节是按顺序排好的就可以了

如果想要完成一个双向通信,那你还要再了解一点就是第三点:发多少个字节?字节顺序如何排列?

本篇只讲主站读,子站发,看明白之后,再点击我的用户名,查看主站写,子站接的经验

先说一下DTU RTU区别:modbus dtu是数字数据传输协议,gsm ,gps可以用,但是如果需要采集模拟量,比如我要询问gsm设备的电池电压,那就要用rtu,,他可以采集模拟量信息,其实对于自己做产品,你都用rtu也可以。也就是说就这点儿区别

知道了dtu rtu的区别,可以尝试分析和编写通信协议了,不需要了解太多,你只需要知道上面提到的第三点就可以了!

先说第三点,从机应该发多少数据给主机?答案是:主机请求N个寄存器,从站就发2N个字节(特别注意,一个寄存器是16位的,而且这个数据长度是不算报文头,不算crc,不算功能码的,下面有图说明)下面看一下真实的通信情况此处主机请求一个寄存器,主机发出10 03 00 00 00 02 c7 4a 注意数据高位在前,crc是低位在前

这是一条完整的从机正常相应命令

返回一个寄存器的数据

好了,通信协议,就这样的,你可以使用modscan和usb转串口设备测试一下

modscan设置如下

现在开始实测一下,先确定电脑至少有两个串口,一个串口作为modscan的发送,一个串口用串口调试助手发数据

波特率都一样就可以,其他默认

然后modscan 点击连接后,自动下发数据

串口调试软件,收到数据后,点一下发送就可以了,可以观看到modscan已经成功收到并显示数据了

END

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士

1、用蓝牙传输东西有两种方法,一种是通过快捷方式,比如桌面的蓝牙开关等以及状态栏的下拉菜单,还有一种是居然菜单设置里的蓝牙选项。

2、在蓝牙界面里按菜单键可以看到重命名、超时检测、显示接受到的文件三个菜单,重命名可以把手机命名为自己喜欢的容易识别的名称

比如“我的手机”“一头老母猪”等,点击手机名称让你的手机处于可检测状态。

3、检测到需要配对的手机后,点击设备名称-选择配对。此时会在两台设备显示蓝牙配对请求界面,核对好秘钥之后选择“配对”就配对好了手机,之后再次使用蓝牙传输文件就不需要再次匹配了。

4、配对好之后就能在两台手机间传输任何可读取的文件了,比如照片、音乐、视频、APK包等等。

以上就是关于c#通过程序如何通过网口发送和接受数据全部的内容,包括:c#通过程序如何通过网口发送和接受数据、如何通过java程序通过DTU发送485命令、小米华为通过蓝牙互传文件,怎么将程序直接发送给对方,在没有源程序文件的情况下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9268755.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存