zoukankan      html  css  js  c++  java
  • Java 实现TCP/IP协议的收发数据(服务端)

    功能如下:

    注:

    1. 只有服务端,没有客户端,测试时采用第三方软件作为客户端的。
    2. 收发数据目前能正常收发数据,只是中文的会变成乱码显示。
    3. 采用Thread类实现一个收发数据的线程。

    服务端代码:

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
        //监听端口
        private static final int PORT = 60020;
    
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = null;
            Socket socket = null;
            try {
                //建立服务器的Socket,并设定一个监听的端口PORT
                serverSocket = new ServerSocket(PORT);
                //由于需要进行循环监听,因此获取消息的操作应放在一个while大循环中
                while(true){
                     try {
                        //建立跟客户端的连接
                        socket = serverSocket.accept();
                     } catch (Exception e) {
                         System.out.println("建立与客户端的连接出现异常");
                         e.printStackTrace();
                     }
                     ServerThread thread = new ServerThread(socket);
                     thread.start();
                }
            } catch (Exception e) {
                System.out.println("端口被占用");
                e.printStackTrace();
            }        
            finally {
                serverSocket.close();
            }
        }
    }
    
    //服务端线程类
    //继承Thread类的话,必须重写run方法,在run方法中定义需要执行的任务。
    class ServerThread extends Thread {
        private Socket socket ;
        InputStream inputStream;
        OutputStream outputStream;
        
        public  ServerThread(Socket socket){
            this.socket=socket;
        }
        public void run(){
            try {
                while (true){
                    //接收客户端的消息并打印
                    System.out.println(socket);
                    inputStream=socket.getInputStream();
                    byte[] bytes = new byte[1024];
                    inputStream.read(bytes);
                    String string = new String(bytes);
                    System.out.println(string);    
                    
                    //向客户端发送消息
                    outputStream = socket.getOutputStream();
                    outputStream.write("OK".getBytes());
                    System.out.println("OK");
                    
                }
            } catch (Exception e) {
                System.out.println("客户端主动断开连接了");
                //e.printStackTrace();
            }
            //操作结束,关闭socket
            try{
                socket.close(); 
            }catch(IOException e){
                System.out.println("关闭连接出现异常");    
                e.printStackTrace();
            }
        }
    }

    先开启服务端,再开启客户端,进行操作。

    客户端:
    (端口号选择“TCPClient”,远程填写IP地址和程序里设定好的端口“60020”,本地选择自己电脑的IP地址)

    服务端:

     注:

    串口调试工具下载地址(或者在本人的百度网盘下载)

    https://www.qqxiazai.com/down/10117.html

  • 相关阅读:
    Erlang学习笔记2
    erlang的Socket参数含义
    Erlang 日期和时间处理、时间戳转换
    图(有向)-拓扑排序
    图(无向连通无权图)-广度优先搜索
    图(无向连通无权图)-深度优先搜索
    图(无向连通无权值图)深度优先生成最小生成树
    客户关系管理系统
    字符串类
    I/O流
  • 原文地址:https://www.cnblogs.com/zhouheblog/p/10655177.html
Copyright © 2011-2022 走看看