java socketIO demo

先启动服务端,再启动客户端
client

package learn.io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        System.out.println("客户端启动");
        Socket client = new Socket();
        client.connect(new InetSocketAddress("localhost", 9999));

        OutputStream ou = client.getOutputStream();
        ou.write("这是客户端发来的消息".getBytes());
        // flush() 则要求立即将缓冲区的数据输出到接收方
        ou.flush();
        Thread inThread = new Thread() {
            @Override
            public void run() {
                int itemp;
                byte[] rbyte = new byte[1024];
                while (true) {
                    try {
                        InputStream in = client.getInputStream();
                        if (in != null) {
                            itemp = in.read(rbyte);
                            System.out.println("读取服务端消息大小: " + itemp);
                            if (itemp > 0) {

                                System.out.println("服务端传过来的消息: " + new String(rbyte));
                                // 接收一次服务端信息就退出

                                if (client != null) {
                                    if (in != null) {
                                        in.close();
                                    }
                                    if (ou != null) {
                                        ou.close();
                                    }
                                    client.close();
                                    return;
                                }
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }
            }

        };
        inThread.start();
        // 给服务端发送消息

    }
}

server

package learn.io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;
import java.util.Set;

/*
 * 旧io socket编程
 * 注意: 不关闭socket就不关闭socket的流
 */
public class ServerDemo {
    public static Set<Socket> clients = new HashSet<Socket>();
    public static boolean close = true;
    public static int count = 1;

    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动");
        ServerSocket server = new ServerSocket();
        server.bind(new InetSocketAddress("localhost", 9999));
        // 等待客户端连接
        while (close) {
            Socket client = server.accept();
            System.out.println(count + "个客户端连接成功");
            count++;
            clients.add(client);
            InputStream in = client.getInputStream();
            byte[] rbyte = new byte[1024];
            // 创建匿名线程
            Thread thread = new Thread() {
                int itemp = 0;

                @Override
                public void run() {
                    try {
                        itemp = in.read(rbyte);
                        System.out.println("读取客户端消息大小: " + itemp);
                        if (itemp > 0) {
                            System.out.println("客户端消息: " + new String(rbyte));
                            // 将连接上来的客户端信息转发给其他客户端
                            for (Socket c : clients) {

                                if (!client.equals(c)) {
                                    boolean btemp = c.isClosed();
                                    System.out.println("当前连接是否以关闭: " + btemp);
                                    btemp = c.isConnected();
                                    System.out.println("当前连接是否成功: " + btemp);
                                    if (!c.isClosed() && c.isConnected()) {
                                        try {
                                            // 发送前验证该连接是否有效
                                            OutputStream ou = c.getOutputStream();
                                            ou.write((client.getInetAddress().toString() + "连接上服务端").getBytes());
                                            // flush() 则要求立即将缓冲区的数据输出到接收方
                                            ou.flush();
                                        } catch (IOException e1) {
                                            System.out.println("关闭无效连接");
                                            c.close();
                                        }
                                    }
                                }
                            }
                        }

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            };
            thread.start();
        }
        System.out.println("服务端退出");
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java Modbus Demo是一个使用Java编写的示例程序,用于演示如何在Java应用程序中实现Modbus通信。 Modbus是一种通信协议,常用于工业自动化领域。它允许不同设备之间进行数据交换,如PLC(可编程逻辑控制器)、传感器和执行器。 Java Modbus Demo提供了一组示例代码,用于实现Modbus TCP和Modbus RTU通信。它包括以下功能: 1. 连接建立:示例代码展示了如何与Modbus从设备建立连接。对于Modbus TCP,示例代码使用TCP/IP协议与设备进行连接。对于Modbus RTU,示例代码使用串行通信协议与设备进行连接。 2. 数据读取:示例代码展示了如何从Modbus设备中读取数据。它使用Modbus协议中的读取指令,读取设备中的寄存器或线圈的值,并将其返回到Java应用程序中进行处理。 3. 数据写入:示例代码展示了如何向Modbus设备写入数据。它使用Modbus协议中的写入指令,将Java应用程序中的数据写入到设备的寄存器或线圈中,以实现对设备的控制。 4. 异常处理:示例代码展示了如何处理Modbus通信中可能发生的异常。这包括连接错误、通信超时和无效的请求等。 Java Modbus Demo是一个易于理解和使用的示例程序,可以帮助开发人员快速上手Modbus通信的Java实现。它提供了基本的连接、数据读取和写入功能,并通过异常处理机制提高了通信的稳定性和可靠性。通过参考这个示例程序,开发人员可以更好地理解和应用Modbus通信协议,从而实现自己的Modbus应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值