使用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,因此,发送端为了将多个发往接收端的包, ...
随机推荐
- Linux中exit与_exit的区别
在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时 ...
- 解决VML遭遇IE8和XHTML DOCTYPE时不能运行的问题(转)
原文网址:http://blog.csdn.net/cuixiping/article/details/4227283 以下代码在IE运行正常 <!DOCTYPE HTML PUBLIC &q ...
- NOIP2008 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- Linux常见疑难问答
Linux常见疑难问答 (1)按a~z顺序排列启动服务进程. #exportLC_ALL=C #英文环境变量设置,主要用于解决乱码问题 #chkconfig –list | gre ...
- 解压版mysql安装
步骤如下: 1.下载安装包 2.在环境变量中配置安装包的bin路径 3.修改安装包下的my-default.ini. 修改basedir和datadir的值为解压文件对应的路径,port和 serve ...
- iOS返回一个前面没有0,小数点后保留两位的数字字符串
/* * 处理一个数字加小数点的字符串,前面无0,保留两位.网上有循环截取的方法,如果数字过长,浪费内存,这个方法在优化内存的基础上设计的. */ -(NSString*)getTheCorrectN ...
- netstat命令
netstat命令会罗列出当前所有的网络连接.连接统计以及路由表信息.默认情况下,netstat命令将罗列出本地计算机所有开启的端口情况,以及它所连接的外部计算机情况. 端口就像一所房子的房门一样.数 ...
- 如何优化cocos2d程序的内存使用和程序大小
在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...
- 阿里中间件——diamond
一.前言 最近工作不忙闲来无事,仔细分析了公司整个项目架构,发现用到了很多阿里巴巴集团开源的框架,今天要介绍的是中间件diamond. 二.diamond学习笔记 1.diamond简介 diamon ...
- bootstrap--小李子demo
最近忙啊...看到各位冬鞋都在认真写博客,认真敲代码,认真工作,总觉得自己时间太少,总觉得时间不够,老了...... 进正题: 上次不知从哪里(忘了)下载了bootstrap的一些使用小demo,以后 ...