用Labview实现服务器向客户机写数据,结合Java实现

最近在学习Labview,以前做课设的时候,经常做的题目都是聊天室什么的。所以想把这个工程做出来,先实现第一步服务器向客户端发送数据。(为什么是这样,是因为b站大佬焊板子的兔子讲了相关的教程,感谢大佬)。

以下是服务器代码,我将结合图片说一下。最左边的有一个C的标志那个控件是一些初始化的参数它在java中相当于这么一句

ServerSocket socket1=new ServerSocket(25000);

另一个1000常量是超时时间(实际过程中把while去掉,配置成1,也不发生超时时间,或许是概念理解有误吧) 

第二个有w的是监听,相当于Java中的

socket1.accept();

所以只实行一次,通常要结合while使用。第三个是写入,这个很好理解,图上很形象,从主机将流传往外部世界。第四个是销毁流的函数。这里为什么有两个销毁的函数呢,是因为我们如果在用Java的时候是不是ServerSocket也要销毁,如果连上来一个socket在通信完成后也要销毁呢,所以一个在while里面,一个在外面。

仿照大佬的做法,将循环变量传给连接上来的主机。在将变量转字符串的时候,我发现客户端如果一次读一个字节,那么客户端的显示控件只能正常显示到9,到10的时候就变成了0。所以在服务器端输入的时候我们就将其直接填充为4字节,然后把接收方直接每次接受4字节就可以了,但是在Java这种高级语言中不用,可以直接用read函数读取,返回值不等于-1就可以判断数据流还没接收完。

下面放一个在IDEA中运行的结果下面是Java代码

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Main {
    public static void main(String[] args) throws Exception{
        //ServerSocket socket1=new ServerSocket(25000);
        //socket1.accept();
        for (int i = 0; i < 100; i++) {
            Socket socket = null;
            InputStream inputStream = null;
            try {
                // 连接到服务器
                socket = new Socket("127.0.0.1", 25000);
                inputStream = socket.getInputStream();
                byte[] buffer = new byte[1024];
                int bytesRead;

                // 循环读取数据
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    // 将读取到的字节转换为字符串
                    String receivedData = new String(buffer, 0, bytesRead, "UTF-8");
                    // 打印接收到的数据
                    System.out.println("Received: " + receivedData);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 关闭资源
                try {
                    if (inputStream != null) {
                        inputStream.close();
                    }
                    if (socket != null) {
                        socket.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

其实说到底要进行的操作都是相通的,图形化编程也是按照创建对象的思想的。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值