使用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(10);
            string str = string.Concat(new object[] { ">SN1;", val_strSN, ";", ch });
            string str2 = this.Request(str);
            return ((str2.Length > 4) && (str2.Substring(0, 4) == "<SN1"));
        }

        private string Request(string val_strRequest)
        {
            string str = this.RequestOneTime(val_strRequest);
            if ((str.Substring(0, 1) != "#") || (str.Substring(str.Length - 1) != "$"))
            {
                str = this.RequestOneTime(val_strRequest);
                if ((str.Substring(0, 1) == "#") && (str.Substring(str.Length - 1) == "$"))
                {
                    return str;
                }
                str = this.RequestOneTime(val_strRequest);
                if ((str.Substring(0, 1) == "#") && (str.Substring(str.Length - 1) == "$"))
                {
                    return str;
                }
                str = this.RequestOneTime(val_strRequest);
                if ((str.Substring(0, 1) == "#") && (str.Substring(str.Length - 1) == "$"))
                {
                    return str;
                }
                str = this.RequestOneTime(val_strRequest);
                if ((str.Substring(0, 1) == "#") && (str.Substring(str.Length - 1) == "$"))
                {
                    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, 0);
                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 = 0; 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[0] == "#UG") && (strArray[strArray.Length - 1] == "$")) && (strArray.Length == 0x86))
            {
                this.strCN = strArray[4];
                this.strFM = strArray[10];
                this.strSN = strArray[strArray.Length - 3];
                this.strDateTime = strArray[8];
                for (int i = 0; i < 120; i++)
                {
                    this.strArrGV[i] = strArray[i + 11];
                }
                return true;
            }
            this.strSN = str;
            return false;
        }
    }
时间: 2024-09-30 06:40:10

使用UDP协议与韩国OACIS压机通讯的相关文章

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

因为项目需要,学习了TwinCAT3中使用UDP协议进行通讯的基本知识.这个做个简单的笔记,方便以后查询. 1 概述 倍福为了实现从实时环境中直接访问网卡(network cards)专门提供了一个函数 “TCP/UDP Realtime”, 这个访问要么来自PLC(61131-3), 要么来自C++.这个函数对使用以下协议进行的通讯提供支持: TCP/IP UDP/IP ARP/Ping TC3中使用该函数实现网络通信的示意图如下所示: 不管使用何种协议, 在基于该协议的项目和TC3之间的通讯

android实现基于TCP和UDP协议的即时通讯,含android端和服务器端

这几天学习了下在android中实现即时通讯的方法,一开始,自然是从基本的网络协议中开始尝试了,这样能够最大化的私人订制自己的应用,还能学习到更多的知识,好处多多,接下来就简单介绍下两种协议的不同点吧 TCP协议:提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用.通过面向连接.端到端和可靠的数据包发送.就如给悬崖上的两人通信时,他必须先把桥建好,确认桥是没问题的情况下,才把信件交过去,以后大家每次通信时,都确认下桥没什么问题,再通过这座桥来回通信了

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

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

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

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

UDP协议疑难杂症全景解析

转载:http://blog.csdn.net/dog250/article/details/6896949 UDP协议疑难杂症全景解析 2011-10-22 19:26 2989人阅读 评论(4) 收藏 举报 tcp网络算法交通socket通讯 如今,但凡说精通网络的,第二个意思就是"精通TCP",事实上,很多自称精通TCP的家伙们只是精通socket接口而已,对TCP行为精通的并不多,笔者也不算精通,但绝对是中等以上水平.如果你真的精通TCP行为,那么本文不读也罢,直接发邮件给我,

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

在 socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包.这样,接收端,就难于分辨出来了,必须提供科学的拆包机制.对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接

TCP和UDP协议的应用/参数查看

TCP发送的包有序号,对方收到包后要给一个反馈,如果超过一定时间还没收到反馈就自动执行超时重发,因此TCP最大的优点是可靠.一般网页(http).邮件(SMTP).远程连接(Telnet).文件(FTP)传送就用TCP UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,一般用于多点通信和实时的数据业务,比如语音广播.视频.QQ.TFTP(简单文件传送).SNMP(简单网络管理协议).RTP(实时传送协议)RIP(路由信息协议,如报告股票市场,航空信息).DNS(域名解释).

在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用了udp,然后在udp上面封装了一下,模拟了一下tcp,解决了大并发的问题,之后因为做的很nb了,虽然epoll这种技术出现了,还是没有改回使用tcp了.现在再做类似的东西就不需要使用udp了.这个说法应该比较可信的. 发布于 2014-04-16 18 条评论 感谢 分享 收藏 • 没有帮助 • 

套接字编程 --- UDP协议

一.套接字(socket) 套接字socket: ip地址 + port端口号.在TCP/IP协议中,它唯一标识网络通讯中的一个进程.套接字用来描述网络连接的 一对一关系. TCP/IP协议规定,网络数据流应采用 大端字节序,即 (内存)低地址高字节(数据). 二.UDP_SOCKET 相关 UDP 协议  ----  用户数据报协议(面向非连接)   ---  SOCK_DGRAM h表示host,n表示network,l表示32位长整数,s表示16位短整数. IPv4地址格式定义在netin