微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从 8 调制解调器服务器接收图像

如何解决无法从 8 调制解调器服务器接收图像

我已经实现了这个与远程 8 调制解调器服务器通信的 java 应用程序,当我从安全摄像头请求图像(无错误与否)时,结果是一个 1 字节的图像(基本上是一个小的白色方块)。你能帮我找出错误吗? 这是我的代码

import java.io.*;
import java.util.Scanner;
import ithakimodem.Modem;

public class g {

    private static Scanner scanner = new Scanner(system.in);
    private static String EchoCode = "E3369";
    private static String noImageErrorscode = "M2269";
    private static String imageErrorsCode = "G6637";
    private static String GPS_Code = "P7302";
    private static String ACK_Code = "Q2591";
    private static String NACK_Code = "R4510";
    
    public static void main(String[] args) throws IOException,InterruptedException {
        int timeout = 2000;
        int speed = 80000;                                          
        Modem modem = new Modem(speed);           
        modem.setTimeout(timeout);
        modem.write("ATD2310ITHAKI\r".getBytes());    
        getConsole(modem);
        modem.write(("test\r").getBytes());
        getConsole(modem);
        
        while (true) {
            System.out.println("\nChoose one of the options below :");
            System.out.print("Option 0: Exit\n" + "Option 1: Echo packages\n" + "Option 2: Image with no errors\n" + "Option 3: Image with errors\n" + "Option 4: Tracks of GPS\n"
                    + "Option 5: ARQ\n" );
            System.out.print("Insert option : ");
            int option = scanner.nextInt();
            System.out.println("");
            
            switch (option) {
                case 0: {
                    // Exit 
                    System.out.println("\nExiting...Goodbye stranger");
                    modem.close();
                    scanner.close();
                    return;
                }
                case 1: {
                    // Echo
                    getEcho(modem,EchoCode);
                    break;
                }
                case 2: {
                    // Image with no errors
                    getimage(modem,noImageErrorscode,"no_error_image.jpg");
                    break;
                }
                case 3: {
                    // Image with errors
                    getimage(modem,imageErrorsCode,"image_with_errors.jpg");
                }
                case 4: {
                    // GPS
                    getGPS(modem,GPS_Code);
                    break;
                }
                case 5: {
                    // ARQ
                    getARQ(modem,ACK_Code,NACK_Code);
                    break;
                }
               
                default:
                    System.out.println("Try again please\n");
            }
        }
    }
    
   
    
    public static String getConsole(Modem modem) {
        int l;
        StringBuilder stringBuilder= new StringBuilder();
        String string = null;
        while (true) {
            try {
                l = modem.read();
                if (l == -1) {
                    break;
                }
                System.out.print((char) l);
                stringBuilder.append((char) l);
                string = stringBuilder.toString();
            } catch (Exception exc) {
                break;
            } 
        }
        System.out.println("");
        return string;
    }
    
    private static void getimage(Modem modem,String password,String fileName) throws IOException {
        int l;
        boolean flag;
        FileOutputStream writer = new FileOutputStream(fileName,false);
        flag = modem.write((password + "\r").getBytes());
        System.out.println("\nReceiving " + fileName + "...");
        
        if (!flag) {
            System.out.println("Code error or end of connection");
            writer.close();
            return;
        }
        
        while (true) {
            try {
                l = modem.read();
                writer.write((char) l);
                writer.flush();
                if (l == -1) {
                    System.out.println("END");
                    break;
                }
            } 
           catch (Exception exc) {
               break;
            }
        }
        writer.close();
    }
    
    
    private static void getGPS(Modem modem,String password) throws IOException {
        int rows = 99;
        String Rcode = "";
        Rcode = password + "R=10200" + rows;
        System.out.println("Executing R parameter = " + Rcode + " (XPPPPLL)");
        
        modem.write((Rcode + "\r").getBytes());
        
        String stringConsole = getConsole(modem);
        if (stringConsole == null) {
            System.out.println("Code error or end of connection");
            return;
        }
        
        String[] stringRows = stringConsole.split("\r\n");
        if (stringRows[0].equals("n.a")) {
            System.out.println("Error : Packages not received");
            return;
        }
        System.out.println("**TRACES**\n");
        float l1 = 0,l2 = 0;   
        int difference = 8;                 
        difference *= 100 / 60;             
        int traceNumber = 7;
        String[] traces = new String[traceNumber + 1];
        int tracesCounter = 0,flag = 0;
        
        for (int i = 0; i < rows; i++) {
            if (stringRows[i].startsWith("$GPGGA")) {
                if (flag == 0) {
                    String str = stringRows[i].split(",")[1];
                    l1 = Integer.valueOf(str.substring(0,6)) * 100 / 60;
                    flag = 1;
                }
                String str = stringRows[i].split(",")[1];
                l2 = Integer.valueOf(str.substring(0,6)) * 100 / 60;
                
                if (Math.abs(l2 - l1) >= difference) {
                    traces[tracesCounter] = stringRows[i];
                    if (tracesCounter == traceNumber)
                        break;
                    tracesCounter++;
                    l1 = l2;
                }
            }
        }
        
        for (int i = 0; i < traceNumber; i++) {
            System.out.println(traces[i]);
        }
        
        String w = "",T_cd_fnl = password + "T=";
        int p = 1;
        System.out.println();
        for (int i = 0; i < traceNumber; i++) {
            String[] strSplit = traces[i].split(",");
            System.out.print("T parameter = ");
            String str1 = strSplit[4].substring(1,3);
            String str2 = strSplit[4].substring(3,5);
            String str3= String.valueOf(Integer.parseInt(strSplit[4].substring(6,10)) * 60 / 100).substring(0,2);
            String str4= strSplit[2].substring(0,2);
            String str5= strSplit[2].substring(2,4);
            String str6= String.valueOf(Integer.parseInt(strSplit[2].substring(5,9)) * 60 / 100).substring(0,2);
            w = str1 + str2 + str3 + str4 + str5 + str6 + "T";
            p = p + 5;
            System.out.println(w);
            T_cd_fnl = T_cd_fnl + w + "=";
        }
        T_cd_fnl = T_cd_fnl.substring(0,T_cd_fnl.length() - 2);
        System.out.println("\nSending code: " + T_cd_fnl);
        getimage(modem,T_cd_fnl,"traces GPS.jpg");
    }
    private static void getEcho(Modem modem,String strl) throws InterruptedException,IOException {
        FileOutputStream echo_time_writer = new FileOutputStream("echoTimes.txt",false);
        FileOutputStream echo_counter_writer = new FileOutputStream("echoCounter.txt",false);
        int h;
        int runtime = 5,packetCounter = 0;
        String str = "";
        System.out.println("\nRuntime (mins) = " + runtime + "\n");
        long start_time = System.currentTimeMillis();
        long stop_time = start_time + 60 * 1000 * runtime;
        long send_time = 0,receiveTime = 0;
        String time = "",ClockTime = "";
        echo_time_writer.write("Clock Time\tSystem Time\r\n".getBytes());
        while (System.currentTimeMillis() <= stop_time) {
            packetCounter++;
            send_time = System.currentTimeMillis();
            modem.write((strl + "\r").getBytes());
            while (true) {
                try {
                    h = modem.read();
                    System.out.print((char) h);
                    str += (char) h;
                    if ( h== -1) {
                        System.out.println("\nCode error or end of connection");
                        return;
                    }
                    if (str.endsWith("PSTOP")) {
                        receiveTime = System.currentTimeMillis();
                        ClockTime = str.substring(18,26) + "\t";
                        time = String.valueOf((receiveTime - send_time) + "\r\n");
                        echo_time_writer.write(ClockTime.getBytes());
                        echo_time_writer.write(time.getBytes());
                        echo_time_writer.flush();
                        str = "";
                        break;
                    }
                } catch (Exception e) {
                    break;
                }
            }
            System.out.println("");
        }
        
        echo_counter_writer.write(("\r\nRuntime: " + String.valueOf(runtime)).getBytes());
        echo_counter_writer.write(("\r\nPackets Received: " + String.valueOf(packetCounter)).getBytes());
        echo_counter_writer.close();
        echo_time_writer.close();
        
    }
    
 private static void getARQ(Modem modem,String strl,String nack_code) throws IOException,InterruptedException {
        
        FileOutputStream arq_time_writer = new FileOutputStream("ARQtimes.txt",false);
        FileOutputStream arq_counter_writer = new FileOutputStream("ARQcounter.txt",false);
        int runtime = 5;
        int xor = 1;
        int f = 1;
        int m;
        int packageNumber = 0;
        int iterationNumber = 0;
        int[] nack_times_counter = new int[15];
        int nack_to_package = 0;
        String time = "",clock_time = "",s = "";
        long start_time = System.currentTimeMillis();
        long stop_time = start_time + 60 * 1000 * runtime;
        long send_time = 0,receive_time = 0;
        System.out.printf("Runtime (mins) = " + runtime + "\n");
        arq_time_writer.write("Clock Time\tSystem Time\tPacket Resends\r\n".getBytes());
        while (System.currentTimeMillis() <= stop_time) {
            if (xor == f) {
                packageNumber++;
                nack_times_counter[nack_to_package]++;
                nack_to_package = 0;
                send_time = System.currentTimeMillis();
                modem.write((strl + "\r").getBytes()); 
            } else {
                iterationNumber++;
                nack_to_package++;
                modem.write((nack_code + "\r").getBytes()); 
            }
            
            while (true) {
                try {
                    m = modem.read();
                    System.out.print((char) m);
                    s += (char) m;
                    if (m == -1) {
                        System.out.println("\nCode error or  end of connection");
                        return;
                    }
                    if (s.endsWith("PSTOP")) {
                        receive_time = System.currentTimeMillis();
                        break;
                    }
                } catch (Exception e) {
                    break;
                }
            }
            System.out.println("");
            String[] string = s.split("<");
            string = string[1].split(">");
            f = Integer.parseInt(string[1].substring(1,4));
            xor = string[0].charat(0) ^ string[0].charat(1);
            for (int i = 2; i < 16; i++) {
                xor = xor ^ string[0].charat(i);
            }
            if (xor == f) {
                System.out.println("Packet ok");
                receive_time = System.currentTimeMillis();
                time = String.valueOf((receive_time - send_time) + "\t");
                clock_time = s.substring(18,26) + "\t";
                arq_time_writer.write(clock_time.getBytes());
                arq_time_writer.write(time.getBytes());
                arq_time_writer.write((String.valueOf(nack_to_package) + "\r\n").getBytes());
                arq_time_writer.flush();
            } else {
                xor = 0;
            }
            
            s = "";
        }
        
        arq_counter_writer.write(("\r\nRuntime: " + String.valueOf(runtime)).getBytes());
        arq_counter_writer.write("\r\nPackets Received (ACK): ".getBytes());
        arq_counter_writer.write(String.valueOf(packageNumber).getBytes());
        arq_counter_writer.write("\r\nPackets Resent (NACK): ".getBytes());
        arq_counter_writer.write(String.valueOf(iterationNumber).getBytes());
        arq_counter_writer.write("\r\nNACK Time Details".getBytes());
        for (int i = 0; i < nack_times_counter.length; i++) {
            arq_counter_writer.write(("\r\n" + i + ":\t" + nack_times_counter[i]).getBytes());
        }
        arq_counter_writer.close();
        arq_counter_writer.close();
        System.out.println("Packets Received: " + packageNumber);
        System.out.println("Packets Resent: " + iterationNumber);
        System.out.println("\n\nFile arqTimes.txt is created.");
        System.out.println("File arqCounter.txt is created.");
    }
}

我知道问题很可能出在 getimage() 函数中,但我还没有弄清楚。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。