最近一个项目需要发送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压机通讯的更多相关文章

  1. 闲来无事,写个基于UDP协议的Socket通讯Demo

    项目一期已经做完,二期需求还没定稿,所以最近比较闲. 上一篇写的是TCP协议,今天写一下UDP协议.TCP是有连接协议,所以发送和接收消息前客户端和服务端需要建立连接:UDP是无连接协议,所以发送消息 ...

  2. QQ--基于TCP/UDP协议的通讯原理

    QQ是一个基于TCP/UDP协议的通讯软件  发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!   一 ...

  3. Shell 脚本实现TCP/UDP协议通讯

    Shell 脚本实现TCP/UDP协议通讯 http://www.cnblogs.com/occult/archive/2012/12/25/2832183.html  

  4. 数据通讯与网络 第五版第24章 传输层协议-UDP协议部分要点

    24.1 介绍 本章节主要集中于传输层协议的解读,图24.1展示TCP.UDP.SCTP在TCP\IP协议栈的位置 24.1.1 服务(Service) 每个协议都提供不同的服务,所以应该合理正确的使 ...

  5. TwinCAT 3中基于UDP协议通讯的C++实现

    因为项目需要,学习了TwinCAT3中使用UDP协议进行通讯的基本知识.这个做个简单的笔记,方便以后查询. 1 概述 倍福为了实现从实时环境中直接访问网卡(network cards)专门提供了一个函 ...

  6. 采用UDP协议实现PIC18F97J60 ethernet bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). TCP/IP Stac ...

  7. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  8. [深入浅出WP8.1(Runtime)]Socket编程之UDP协议

    13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...

  9. 【转】关于TCP和UDP协议消息保护边界的介绍

    在 socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发往接收端的包, ...

随机推荐

  1. ubuntu 13.10 monodevelop3 安装

    版本 ubuntu 13.10 桌面模式默认:unity :文件管理器:nautilus

  2. 您只能在 HTML 输出流中使用 document.write。如果您在文档已加载后使用它(比如在函数中),会覆盖整个文档。

    刚刚接触JS,看到这句话时一时没搞懂,想了终于有了一些眉目,意思就是在文档加载过后,如果我们用比方说按钮的方式重新加载文档,就会把文档都覆盖: 列如: <!DOCTYPE html> &l ...

  3. RESTful Web Services初探

    RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...

  4. Junit3断言

    在Robotium自动化测试的过程中,发现没有断言的脚本是没有意义的,现整理Junit3和Junit4的断言,供日后查阅. http://junit.org/ Junit3断言API: http:// ...

  5. Linux 用户和用户组管理

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...

  6. java 使用递归获取指定文件路径目录,删除指定的文件后缀(可扩展,根据具体需要的删除的后缀进行配置)~~

    在工作开发过程中,每次用SVN提交代码全选择的时候,发现会产生很多不需要的文件后缀垃圾文件,感觉挺烦人的,一个一个删太麻烦了,如果产生多种后缀文件时,那删起来多费劲,是吧?想想,就写了一段程序通过递归 ...

  7. C# 加密解密文件

    using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptograph ...

  8. js中js数组、对象与json之间的转换

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如:JSON字符串:var str1 = '{ &quo ...

  9. tcp协议头窗口,滑动窗口,流控制,拥塞控制关系

    参考文章 TCP 的那些事儿(下) http://coolshell.cn/articles/11609.html tcp/ip详解--拥塞控制 & 慢启动 快恢复 拥塞避免 http://b ...

  10. [python学习] 介绍python的property,以及为什么要用setter,一个小栗子

    python中的property是比较好用的. 先来一段代码 #-*- coding:utf-8 -*- class C(object): status_dict = { 1: 'accept', 2 ...