
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命令、小米华为通过蓝牙互传文件,怎么将程序直接发送给对方,在没有源程序文件的情况下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)