zoukankan      html  css  js  c++  java
  • 毕业设计-进度-客户端向服务器发送消息

    客户端与服务器的通讯

    基于TCP协议的Socket

    客户端发送消息:

    protected void connectServerWithTCPSocket() throws Exception{
    
                Socket socket;
               // 创建一个Socket对象,并指定服务端的IP及端口号
                /**
                 * 服务器IP:123.57.56.94
                 * 服务器post:22;3389
                 */
                    socket = new Socket("123.57.56.94", 3389);
                    // 创建一个InputStream用户读取要发送的文件。
                    InputStream inputStream = new FileInputStream("F://a.txt");//测试文件
                //                // 获取Socket的OutputStream对象用于发送数据。
                    OutputStream outputStream = socket.getOutputStream();
                    // 创建一个byte类型的buffer字节数组,用于存放读取的本地文件
                    byte buffer[] = new byte[4 * 1024];
                    int temp = 0;
                    // 循环读取文件
                    while ((temp = inputStream.read(buffer)) != -1) {
                        // 把数据写入到OuputStream对象中
                        outputStream.write(buffer, 0, temp);
                    }
                    // 发送读取的数据到服务端
                    outputStream.flush();

    持续监听服务器端口(java)

    1. 编写服务器监听类
    package Listener;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.http.HttpServlet;
    
    public class videoandGPS extends HttpServlet implements ServletContextListener {
    
        public void contextDestroyed(ServletContextEvent arg0) {
    
        }
    
        public void contextInitialized(ServletContextEvent arg0) {
    
            System.out.println("-----------------video and GPS thread--------------------------");
    
    //gps守护线程
    
            System.out.println("-----------------GPS监听已启动--------------------------");
    
            StartThread s = new StartThread();
    
            s.setDaemon(true);// 设置线程为后台线程,tomcat不会被hold,启动后依然一直监听。
    
            s.start();
    
        }
    
    }
    1. 守护主线程
    package Listener;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class StartThread extends Thread {
    
        public void run() {
    
            int GPSport = 9999;
    
            System.out.println("-----------------GPSport:" + GPSport + "---------------------------");
    
            try {
    
                ServerSocket serverSocket = new ServerSocket(GPSport);
    
    // 轮流等待请求
    
                while (true)
    
                {
    
    // 等待客户端请求,无请求则闲置;有请求到来时,返回一个对该请求的socket连接
    
                    Socket clientSocket = serverSocket.accept();
    
    // 创建zithread对象,通过socket连接通信
    
                    Thread t = new Thread(new ChildThread(clientSocket));
    
                    t.start();
    
                }
    
            } catch (IOException e) {
    
    // TODO Auto-generated catch block
    
                e.printStackTrace();
    
            }
        }
    }
    1. 守护子线程
    package Listener;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    public class ChildThread implements Runnable {
    
        private BufferedReader reader;
    
        private Socket socket;
    
        public ChildThread(Socket clientSocket)
    
        {
    
            try
    
            {
    
    // 得到socket连接
    
                socket = clientSocket;
    
    // 得到客户端发来的消息
    
                InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
    
                reader = new BufferedReader(isReader);
    
    //发送指令
    
                OutputStream os = socket.getOutputStream();
    
                PrintWriter pw = new PrintWriter(os);
    
                String info = "[3G*4700546714*0005*VERNO]";
    
                pw.write(info);
    
                pw.flush();
    
    //socket.shutdownOutput();
    
            } catch (IOException e)
    
            {
    
                e.printStackTrace();
    
            }
    
        }
    
        public void run() {
    
            String message;
    
            try
    
            {
    
                while ((message = reader.readLine()) != null)
    
                {
    
                    System.out.println("客户端消息: " + message);
    
                }
    
            } catch (IOException e)
    
            {
    
                e.printStackTrace();
    
            }
    
        }
    
    }

    web.xml配置监听

    <listener>
    
    <listener-class>videoandGPS.videoandGPS</listener-class>
    
    </listener>

    客户端无法完成发送问题

    体现在初始化Socket时出现异常,客户机不能实现与服务器端口的连接。

  • 相关阅读:
    Linux练习题
    我们普通大学生和国内一流大学的学生差距到底在哪里?
    Python修复图像文件后缀名
    Linux查找/扫描局域网打印机IP
    修改分区后的 Grub rescue
    Linux Matlab mex gcc 版本
    UFLDL新版教程
    Linux之时间、地点、人物、事件、情节
    GMchess Linux下的中国象棋游戏
    Linux 终端 忽略大小写
  • 原文地址:https://www.cnblogs.com/1605-3QYL/p/12257690.html
Copyright © 2011-2022 走看看