在做项目的过程中,本来是想使用JAVA的comm.jar工具实现串口通讯,不知道怎么回事,总是取不到电脑的串口。所以,改为现在的这种模式:java通过socket给vb程序发送指令,然后VB程序通过comm部件给串口发送指令。效果不错。
程序服务端使用VB实现:
代码:
Private lngWSKIndex As Long Private Sub Form_Load() lvRecord.ColumnHeaders.Clear lvRecord.ColumnHeaders.Add , , "ID", lvRecord.Width / 15 lvRecord.ColumnHeaders.Add , , "客户端序列号", lvRecord.Width / 4 lvRecord.ColumnHeaders.Add , , "内容", lvRecord.Width lvRecord.ListItems.Clear wskServer(0).LocalPort = 9999 wskServer(0).Listen lngWSKIndex = 0 If MSComm1.PortOpen = True Then MSComm1.PortOpen = False Else End If MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.PortOpen = True End Sub
Private Sub wskServer_Close(Index As Integer) If Index = 0 Then Exit Sub '关闭客户端对应的应答Socket Close #Index '卸载自动加载控件,节省资源 Unload wskServer(Index) End Sub
'服务器端接收到连接请求 Private Sub wskServer_ConnectionRequest(Index As Integer, ByVal requestID As Long) lngWSKIndex = lngWSKIndex + 1 '连接号自动加1 Load wskServer(lngWSKIndex) '加载客户端连接请求对应的应答Socket wskServer(lngWSKIndex).Accept requestID '允许连接 End Sub
Private Sub wskServer_DataArrival(Index As Integer, ByVal bytesTotal As Long) Dim strGetData As String Dim nCount As Integer Dim i As Integer wskServer(Index).GetData strGetData, vbString nCount = lvRecord.ListItems.Count nCount = nCount + 1 If strGetData = "1=1" Then lvRecord.ListItems.Add , , nCount lvRecord.ListItems(nCount).ListSubItems.Add , , "接收到第" & Index & "个警报" lvRecord.ListItems(nCount).ListSubItems.Add , , "未结账通过" End If '只对接收到的客户端发送命令 ' wskServer(Index).SendData "信息:" & strGetData & "已收到!" Dim Temp(0) As Byte Dim strBuff As String strBuff = strGetData MSComm1.Output = strBuff End Sub
需要添加Winsock部件和MSComm部件
程序的客户端JAVA代码
package com;
import java.io.*; import java.net.*;
public class Socket_t {
public static void main(String args[]){ try { Socket_t.SendData("1=1"); Thread.sleep(10000L); Socket_t.SendData("1=0"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public static void SendData(String data){ try{ Socket socket=new Socket("127.0.0.1",9999); BufferedReader sin=new BufferedReader(new InputStreamReader(System.in)); PrintWriter os=new PrintWriter(socket.getOutputStream()); BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream())); os.write(data); os.flush(); os.close(); //关闭Socket输出流 socket.close(); //关闭Socket }catch(Exception e){ e.printStackTrace(); } } }
|