使用UDP协议与韩国OACIS压机通讯
最近一个项目需要发送SN给OACIS,
研究了一下OACIS文档,
从文档中可以看出,传输协议只能使用UDP,切传输命令为>SN1; + SN + ; + LF
LF的定义在Linux和Unix中换行符,但是在Windows中换行为CRLF,MAC中又为CR
所以这里只能用ASCII,LF的ASCII为10
所以程序如下:
public class OACISHelper
{
public string[] strArrGV;
public string strCN;
public string strDateTime;
public string strFM; public string strOACISIPAdd;
public int iOACISPort;
public string strSN; public bool setSN(string val_strSN)
{
char ch = Convert.ToChar();
string str = string.Concat(new object[] { ">SN1;", val_strSN, ";", ch });
string str2 = this.Request(str);
return ((str2.Length > ) && (str2.Substring(, ) == "<SN1"));
} private string Request(string val_strRequest)
{
string str = this.RequestOneTime(val_strRequest);
if ((str.Substring(, ) != "#") || (str.Substring(str.Length - ) != "$"))
{
str = this.RequestOneTime(val_strRequest);
if ((str.Substring(, ) == "#") && (str.Substring(str.Length - ) == "$"))
{
return str;
}
str = this.RequestOneTime(val_strRequest);
if ((str.Substring(, ) == "#") && (str.Substring(str.Length - ) == "$"))
{
return str;
}
str = this.RequestOneTime(val_strRequest);
if ((str.Substring(, ) == "#") && (str.Substring(str.Length - ) == "$"))
{
return str;
}
str = this.RequestOneTime(val_strRequest);
if ((str.Substring(, ) == "#") && (str.Substring(str.Length - ) == "$"))
{
return str;
}
}
return str;
} private string RequestOneTime(string val_strRequest)
{
byte[] bytes = null;
try
{
byte[] dgram = Encoding.Default.GetBytes(val_strRequest);
UdpClient client = new UdpClient();
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, );
client.Client.ReceiveTimeout = 0x3e8;
client.Send(dgram, dgram.Length, this.strOACISIPAdd, this.iOACISPort);
bytes = client.Receive(ref remoteEP);
return Encoding.Default.GetString(bytes);
}
catch (Exception exception)
{
string str2 = "";
if (bytes != null)
{
for (int i = ; i < bytes.Length; i++)
{
str2 = str2 + " / " + i.ToString() + "-" + bytes[i].ToString();
}
}
return exception.Message;
}
} public bool readResults()
{
string str = this.Request("@UG;LN;004;$");
string[] strArray = str.Split(new char[] { ';' });
if (((strArray[] == "#UG") && (strArray[strArray.Length - ] == "$")) && (strArray.Length == 0x86))
{
this.strCN = strArray[];
this.strFM = strArray[];
this.strSN = strArray[strArray.Length - ];
this.strDateTime = strArray[];
for (int i = ; i < ; i++)
{
this.strArrGV[i] = strArray[i + ];
}
return true;
}
this.strSN = str;
return false;
}
}
使用UDP协议与韩国OACIS压机通讯的更多相关文章
- 闲来无事,写个基于UDP协议的Socket通讯Demo
项目一期已经做完,二期需求还没定稿,所以最近比较闲. 上一篇写的是TCP协议,今天写一下UDP协议.TCP是有连接协议,所以发送和接收消息前客户端和服务端需要建立连接:UDP是无连接协议,所以发送消息 ...
- QQ--基于TCP/UDP协议的通讯原理
QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的! 一 ...
- Shell 脚本实现TCP/UDP协议通讯
Shell 脚本实现TCP/UDP协议通讯 http://www.cnblogs.com/occult/archive/2012/12/25/2832183.html
- 数据通讯与网络 第五版第24章 传输层协议-UDP协议部分要点
24.1 介绍 本章节主要集中于传输层协议的解读,图24.1展示TCP.UDP.SCTP在TCP\IP协议栈的位置 24.1.1 服务(Service) 每个协议都提供不同的服务,所以应该合理正确的使 ...
- TwinCAT 3中基于UDP协议通讯的C++实现
因为项目需要,学习了TwinCAT3中使用UDP协议进行通讯的基本知识.这个做个简单的笔记,方便以后查询. 1 概述 倍福为了实现从实时环境中直接访问网卡(network cards)专门提供了一个函 ...
- 采用UDP协议实现PIC18F97J60 ethernet bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). TCP/IP Stac ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- [深入浅出WP8.1(Runtime)]Socket编程之UDP协议
13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...
- 【转】关于TCP和UDP协议消息保护边界的介绍
在 socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发往接收端的包, ...
随机推荐
- Android学习起步 - AutoCompleteTextView及MultiAutoCompleteTextView控件使用
大家在用百度搜索时,输入几个词就出现下拉框可选,以下两个控件就具有这个功能 AutoCompleteTextView:只能匹配输入的开始,只有一次匹配 MultiAutoCompleteTextVie ...
- 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
PS:在前几天的面试中,被问到了这个题.然而当时只能用最低效的方法来解. 问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2, ...
- IntelliJ IDEA - 代码辅助功能
Eclipse 和 IntelliJ IDEA 都提供了写代码的辅助功能,包括代码补全.代码生成.快速修饰和动态模板等功能. 1. 快速修复(Quick-fixes) 快捷键:Alt+Enter 所有 ...
- Jsoup使用随记
这段时间工作比较空闲,在网上找资料学习的时候看到数据抓取这一块,来了兴趣 用jsoup实现数据抓取着实方便,唯一美中不足的是官方API是英文版的,对我这样英语水平不好的程序员来说着实困扰,只能一点点的 ...
- mac boot2docker certs not valid with 1.7
摘自:https://github.com/boot2docker/boot2docker/issues/824 An error occurred trying to connect: Get ht ...
- WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default i
jdbc连接数据库候,对数据进行访问,访问正常当出现如下警告: WARN: Establishing SSL connection without server's identity verifica ...
- 基于MFC的单文档,多文档,对话框应用程序
从类的角度区分: 基于对话框(3个类): CAboutDlg 程序名App 程序名Dlg 单文档(5个类): CAboutDlg CMainFrame 程序名App 程序名Doc 程序名View 多文 ...
- 9. js实现java方法:HtmlUtils.htmlEscape()
function htmlEscape(str) { return String(str) .replace(/&/g, '&') .replace(/"/g, '" ...
- <读书笔记>软件调试之道 :问题的核心-如何修复缺陷
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! 修复缺陷 对于一个好的修复来说,不仅仅是让软件运行正确,还需要为将来奠定基础.一 ...
- vim命令的妙用
进来看到了一篇博文,讲述的是无插件Vim编程技巧,然后看到里面还有一些其余的关于vim的博文,感觉值得收藏:酷 壳 – CoolShell.cn 这里挑选出其中一篇,这也是自己已经学习过的: 无插件V ...