现在大多数语言都支持客户-服务器模式(C/S)编程,其中VB给我们提供了很好的客户-服务器编程方式。下面我们用VB来实现TCP/IP网络编程。
TCP/IP协议是Internet最重要的协议。VB提供了WinSock控件,用于在TCP/IP的基础上进行网络通信。当两个应用程序使用Socket进行网络通信时,其中一个必须创建Socket服务器侦听,而另一个必须创建Socket客户去连接服务器。这样两个程序就可以进行通信了。
①创建服务器
首先创建一个服务端口号。并开始侦听是否有客户请求连接。
建立一窗体,并向其增加一个Winsock控件(可在工程菜单中的部件项来添加此控件)
添加两文本框Text1,Text2,和一按钮Command1
Private Sub Form_Load()
SockServerLocalPort = 2000 ′服务器端口号,最好大于1000
SockServerListen ′开始侦听
End Sub
Private Sub Form_Unload(Cancel As Integer)
SockServerClose
End Sub
Private Sub SockServer_Close()
SockServerClose
End Sub
Private Sub SockServer_ConnectionRequest(ByVal requestID As Long)
SockServerClose
SockServerAccept requestID ′表示客户请求连接的ID号
End Sub
′当客户向服务器发送数据到达后,产生DataArrival事件,在事件中接收数据,GetData方法接收数据。
Private Sub SockServer_Data
Arrival(ByVal bytesTotal As Long)
Dim s As String
SockServerGetData s
Text1Text = s
End Sub
当需要向客户发送数据时,只需调用SendData方法。
Private Sub Command1_Click()
SockServer SendData Text2Text
End Sub
②创建客户
要创建客户连接服务器,首先设置服务器主机名,如IP地址、域名或计算机名,然后设置服务器端口,最后连接服务器。
建立一窗体,并向其增加一个Winsock控件(可在工程菜单中的部件项来添加此控件),取名为:SockC1。添加两文本框Text1,Text2,和一按钮Command1
Private Sub Form_Load()
SockClRemoteHost =′127001″
′表示服务器主机名
SockClRemotePort = 2000
′表示服务器端口名
SockClConnect
′连接到服务器
End Sub
Private Sub Form_Unload(Cancel As Integer)
SockClClose
End Sub
Private Sub SockCl_Close()
SockClClose
End Sub
Private Sub SockCl_DataArrival(ByVal bytesTotal As Long)
Dim s As String
SockClGetData s ′接收数据到文本框中
Text1Text = s
End Sub
Private Sub Command1_Click()
SockClSendData Text2Text ′向服务器发送数据
End Sub
③进行通信
把这两个窗体分别编译成两个EXE文件,服务器Serverexe和客户Clientexe程序,并把它们分别安装在服务器端和客户端,这样就可以实现两者通信了。
-兴达三菱转以太网模块 之 三菱fx系列plc如何实现Modbus TCP服务器
硬件:三菱fx 一个
兴达易控三菱转以太网 CHNet-FX 一台
CHNet-FX模块太网口它支持8个连接,那么也就是说,当我们plc做ModbusTCP服务器的时候可以有同时8个Modbus TCP客户端。同时和他进行通讯,
我们所需要的一些软件这个以太网调试助手,用来调试这个调试这个plc这个服务器,调试程序,然后我们还会用到这个Modbus poll可以来模拟,ModbusTCP服务器,ModbusRTU主站,以及Modbus ASC主站,
接下来我们继续说一下这个三菱FX5U他实现Modbus TCP这个组态过程,下面就是我们做好的一个这个工程
要实现他这个Modbus TCP他这个过程呢,首先呢第一步用FX5U PLC 与CHNet-FX连接
新建 FX3U/FX3UC 工程,双击导航栏中的连接目标:Connection。
跳出的选项板后,在计算机侧选择双击“EthernetBoard”选项,随后提醒中点击“是”;在可编程控制器侧双击“PLC Module”;
在随后的跳出的设置中,点击“搜索网络上的 FXCPU(S)”后,会搜索到 CHNet-FX所连接的 FX3UC。
按图中标号依次选择后,最后点击确认;
在上述中选择好 IP 地址后,点击“通信测试”,即可提示与 FX3UCCPU 连接
5随后即可“在线”选项栏中,进行 PLC 的读取、写入和监视等 *** 作。
Modbus分配地址
PLC配置
口号就是502端口,作为服务器需要设置的参数,
这个逻辑程序D0、D1、D2、D3分别付了初值是K0、K1、K2、K3在初始化的时候我们对D4、D5、D6、D7进行个清零 *** 作设置的这个参数,通讯手段默认ModbusTCP,可编程IP地址就是前面设置的,1921681161端
使用了一个特殊标志位,每一分钟我们会对D0、D1、D2、D3作一个加一 *** 作,看看能不能做一个加一 *** 作,然后会实时的判断,当D0、D1、D2、D3各自的值大于6000的时候分别各自清零,也就说d0d1d2d3的值他会每一分钟都会发生改变,并且d0d1d23d3的纸最终它是会在零到6000之间发生一个变化,(包括0和6000)
这么做的目的是为了客户端去读取PLC的寄存器的时候,D0、D1、D2、D3是变化的方便我们观察变化。这就是一小段逻辑程序
进入程序监视
此时D0、D1、D2、D3分别是0、1、2、3;过1分钟就会进行一下+1 *** 作下面就可以测PLC程序了
先用以太网调试助手进行测试
适配器是PLC通过CHNet-FX网线连接到路由器,电脑通过无线网卡连接到路由器
协议模式:客户端 Client
目标IP:CHNet-FX用户自定义IP地址
使用ServletSocket创建TCP服务器端
从图 中看上去TCP通信的两个通信实体之间并没有服务器端 客户端之分 但那是两个通信实体已经建立虚拟链路之后的示意图 在两个通信实体没有建立虚拟链路之前 必须有一个通信实体先做出 主动姿态 主动接收来自其他通信实体的连接请求
Java中能接受其他通信实体连接请求的类是ServerSocket ServerSocket对象用于监听来自客户端的Socket连接 如果没有连接 它将一直处于等待状态 ServerSocket包含一个监听来自客户端连接请求的方法
Socket accept() 如果接收到一个客户端Socket的连接请求 该方法将返回一个与客户端Socket对应的Socket(如图 所示每个TCP连接有两个Socket) 否则该方法将一直处于等待状态 线程也被阻塞
为了创建ServerSocket对象 ServerSocket类提供了如下几个构造器
ServerSocket(int port) 用指定的端口port来创建一个ServerSocket 该端口应该是有一个有效的端口整数值 ~
ServerSocket(int port int backlog) 增加一个用来改变连接队列长度的参数backlog
ServerSocket(int port int backlog InetAddress localAddr) 在机器存在多个 IP地址的情况下 允许通过localAddr这个参数来指定将ServerSocket绑定到指定的IP地址
当ServerSocket使用完毕 应使用ServerSocket的close()方法来关闭该ServerSocket 通常情况下 服务器不应该只接受一个客户端请求 而应该不断地接受来自客户端的所有请求 所以Java程序通常会通过循环 不断地调用ServerSocket的accept()方法 如下代码片段所示
//创建一个ServerSocket 用于监听客户端Socket的连接请求
ServerSocket ss = new ServerSocket( )
//采用循环不断接受来自客户端的请求
while (true)
{
//每当接受到客户端Socket的请求 服务器端也对应产生一个Socket
Socket s = ss accept()
//下面就可以使用Socket进行通信了
…
}
上面程序中创建ServerSocket没有指定IP地址 则该ServerSocket将会绑定到本机默认的IP地址 程序中使用 作为该ServerSocket的端口号 通常推荐使用 以上的端口 主要是为了避免与其他应用程序的通用端口冲突
返回目录 疯狂Java讲义
编辑推荐
Java程序性能优化 让你的Java程序更快 更稳定
新手学Java 编程
lishixinzhi/Article/program/Java/hx/201311/27266
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)