基于TCP协议的Socket通讯
目的是为了实现与读码器设备进行通讯,同时有些mes系统也会用socket协议来进行通讯,一般是mes那边做服务器,然后设备上位机这边会作客户端,而对于读码器也是读码器服务器然后软件去读取,但是也有软件作服务器的情况,比如基恩士。。手册上是这么写的有什么办法)
C#中利用socket通讯有两个类,socket类和TcpClient类,TcpClient类是对Socket类的进一步封装,简化了很多操作,但大体流程是一样的,对于服务端来说,IPEndPoint指定了IP和端口后。启动TcpLinster来监听客户端连接,这个类会一直阻塞等待连接。然后NetworkStream来获取连接的数据,NetworkStream获取的是byte类型的数据,需要自己根据编码格式进行解码,但如果知道数据类型是字符串形式的话就可以用 StreamReader或者StreamWriter来进行字符处理,里面也封装简化了好多步骤方法,也相对于手动来说更安全。
这是NetWorkStream的手动处理方法:
byte[] bt = new bytr[1024];//数据缓冲区
int bytesRead = networkstream.Read(bt,0,bt.Length);//获取实际数据的长度
//Read会阻塞代码,直到有数据写入,其中参数分别是:(存储的数组,偏移量,数组的长度)---(偏移量可以用来拼接数据
string data = Encoding.ASCII.getString(bt,0,bytesRead);//解码字符串
或者用简化方法:
StreamReader reader = new StreamReader(networkStream, Encoding.ASCII);//编码格式根据更改
StreamWriter writer = new StreamWriter(networkStream, Encoding.ASCII);
//然后使用reader.read()来读取数据
//使用writer.write()来写入数据

浙公网安备 33010602011771号