周报

(写了第三次了,提交好几次都被拒绝访问了,就离谱)来公司已经一个多月了,这段时间接触了好几个项目,对于原本比较抵触的前端我也学习了很多,以后会偏向全栈发展,现在我们公司的业务原因,我针对了sockt网络编程和就Javafx页面进行了学习,这个周分别做了两个demo,学习了modus网络编程协议,aop切面日志,希望未来能接触更多的技术,接触更多的项目,毕竟对于实习生来说实习中的项目经验才是最为宝贵的东西。我会抽空写一下博客,记录一下学习的过程,为以后的发展早做准备img


(系统多图片上传有问题)

import com.zktd.data_acquisition.utils.ByteUtil;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 发送消息线程
 */

class PUCSend extends Thread{
    private Socket socket;
    private Scanner scanner;
    public PUCSend(Socket socket,Scanner scanner) {
        this.socket = socket;
        this.scanner = scanner;
    }

    @Override
    public void run() {
        this.sendMsg();
    }

    private void sendMsg() {
        PrintWriter pw = null;
        try {
            pw = new PrintWriter(this.socket.getOutputStream());
            while (true) {
                String msg = scanner.nextLine();
                pw.println(msg);
                pw.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (scanner != null) {
                scanner.close();
            }
            if (pw != null) {
                pw.close();
            }
            if (this.socket != null) {
                try {
                    this.socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

/**
 * 接受消息的线程
 */
class PUCReceive extends Thread{
    private Socket socket = null;

    public PUCReceive(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        this.receiveMsg();
    }

    private void receiveMsg(){
        BufferedInputStream bis = null;
        try {
            bis = new BufferedInputStream(this.socket.getInputStream());
            byte[] buf = new byte[256];
            byte[] byteData = new byte[0];
            byte[] headMessage = new byte[4];
            int realLength = 0;
            while (true) {
                while (bis.available() == 0) {Thread.sleep(100);}//wait()
                bis.read(headMessage);
                //解析数据头,包含数据长度信息
                int byteSize = ByteUtil.getInt(headMessage, 0);
                for (int i = 0; i < byteSize;) {
                    realLength = bis.read(buf);
                    byteData = ByteUtil.byteArrayContact(byteData,buf,realLength);
                    i += realLength;
                }
                List<Integer> yieldList = new ArrayList<>();
                for (int i = 0; i < byteData.length;) {
                    yieldList.add(ByteUtil.getInt(byteData,i));
                    i+=4;
                }
                byteData = new byte[0];
                yieldList.forEach(System.out::println);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


}

public class PUCClient {
    public static void main(String[] args) {
        Scanner scanner = null;
        ServerSocket serverSocket = null;
        Socket socket = null;
        try {
            scanner = new Scanner(System.in);
            System.out.println("请输入: server,<port> 或者: <ip>,<port>");
//            String str = scanner.nextLine();
            String str = "192.168.1.103,8888";
            String[] arr = str.split(",");
            if ("server".equals(arr[0])) {
                //启动服务器
                System.out.println("TCP Server Listen at " + arr[1]);
                serverSocket = new ServerSocket(Integer.parseInt(arr[1]));
                socket = serverSocket.accept();
                System.out.println("连接成功!");
            } else {
                //启动客户端
                socket = new Socket(arr[0],Integer.parseInt(arr[1]));
                System.out.println("连接成功!");
            }
            //启动发送消息的线程
            new PUCSend(socket,scanner).start();
            //启动接受消息的线程
            new PUCReceive(socket).start();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

posted @ 2021-08-21 16:21  劍客  阅读(50)  评论(0)    收藏  举报