JavaRush /Java Blog /Random-KO /우리는 연락을 끊고 편지를 받습니다
Izhak
레벨 22
Москва

우리는 연락을 끊고 편지를 받습니다

Random-KO 그룹에 게시되었습니다
안녕하세요. 일반 중국 USB-COM 어댑터(RTS - CTS)에서 핀 7과 8의 닫힘을 모니터링하는 애플리케이션을 만든 경험을 공유하고 싶습니다. 그리고 그런 일이 생기면 나에게 메일을 보내준다. 처음에는 물 흐름 센서를 만드는 것이 목표였습니다. 나중에 폐쇄하는 방법은 대체로 중요하지 않지만 주를 우체국으로 보내고 싶었습니다. 저는 JavaRush를 사용하여 Java를 배우고 있으므로 IntelliJ Idea라는 적절한 도구를 선택했습니다. 물론 메일은 SMS가 아니지만 SMS는 com 포트와 함께 작동해야 합니다. 여기서는 이를 위한 아주 좋은 도구를 배울 것입니다. 3G 모뎀을 알아낼 때 이미 있지만 약간의 정보를 추가할 수 있습니다. 인터넷에 많이 있어요. 따라서 하드웨어 부분에 초점을 맞추지 말고 커넥터 자체를 살펴보겠습니다 DB9F 핀 5는 접지이고 핀 7은 RTS입니다. 프로그램에는 항상 1개가 걸려 있고(핀 5에 대해 + 9V) 핀이 있습니다. 8은 입력입니다. 5킬로옴 저항에 의해 0V로 풀업됩니다. 프로그램이 실행되지 않을 때 핀 7의 전압은 -9V가 됩니다. 유출 센서를 사용하면 핀 8에 적용할 수 있지만 음전압으로 인해 타는 장치가 있습니다. 따라서 프로그램이 어떻게 작동하는지 확인하기 위해 프로그램을 시작한 후 연락처 7에서 연락처 8을 닫고 프로그램은 이러한 이벤트를 1초에 한 번씩 모니터링하고 "Puddle"이라는 텍스트가 포함된 편지를 보낸 다음 엽니다. 프로그램은 "웅덩이"라는 텍스트가 포함된 편지를 보낼 것입니다. 웅덩이가 없습니다." 따라서 JDK 및 IntelliJ Idea를 설치하고 Java 기본 사항을 배우려면 JavaRush.ru의 첫 번째 강의를 활용하면 됩니다. 새 프로젝트를 만드는 것부터 시작하겠습니다. 이미 프로젝트가 열려 있는 경우 새 프로젝트를 만들 때 새 창에서 열라는 메시지가 표시되므로 즉시 예약하겠습니다. 매우 편리합니다. (저는 모든 프로젝트가 하나의 창에서 열리는 Eclipse로 작업해 본 적이 있습니다.) 다음으로 설명 없이 많은 사진을 제공하므로 모든 것이 명확합니다. 우리는 연락처를 닫고 편지를받습니다 - 1 연락처를 닫고 편지를받습니다 - 2 연락처를 닫고 편지를받습니다 - 2 연락처를 닫고 편지를받습니다 - 4 연락처를 닫고 편지를받습니다 - 3 연락처를 닫고 편지를받습니다 - 6 연락처를 닫고 편지를받습니다 - 4 연락처를 닫고 편지를받습니다 - 8 연락처를 닫고 편지를받습니다 - 5 다음 사진부터 시작하면 매우 흥미롭습니다. 저는 항상 이 전문가를 보았지만 그것으로 뭔가를 하는 것이 두려웠지만 시도해 보았습니다. 모든 것이 매우 간단하다는 것이 밝혀졌습니다. 라이브러리가 필요하면 이름을 입력하고 최신 버전을 찾아 다운로드하세요. 바라보다. 우리는 http://habrahabr.ru/post/133766/ jSSC 라이브러리와 javax:mail 라이브러리를 다운로드합니다. 내가 이해하는 바에 따르면 표준 라이브러리 목록에서 제거되었지만 Maven에서는 쉽게 다운로드할 수 있습니다. 연락처를 닫고 편지를받습니다 - 6 연락처를 닫고 편지를받습니다 - 11 연락처를 닫고 편지를받습니다 - 7 연락처를 닫고 편지를받습니다 - 13 연락처를 닫고 편지를받습니다 - 8 확인을 클릭하면 라이브러리가 추가됩니다. 짜잔 :) 연락처를 닫고 편지를받습니다 - 9 텍스트를 입력하세요. comRun.java 1 package ru.example.comTest.Test1; 2 3 import jssc.*; 4 5 import java.io.UnsupportedEncodingException; 6 import java.util.Properties; 7 import javax.mail.*; 8 import javax.mail.internet.*; 9 10 /** 11 * Created by ipolma on 8/12/2014. 12 */ 13 14 public class comRun { 15 16 17 private static SerialPort serialPort; 18 19 public static void main(String[] args) { 20 21 22 String[] retPorts = SerialPortList.getPortNames(); 23 //for (String port: retPorts){System.out.println(port);} 24 25 serialPort = new SerialPort(retPorts[1]);//"COM4"); указываем второй порт 26 System.out.println(serialPort.getPortName()); 27 try { 28 //Открываем порт 29 if (serialPort.isOpened()) serialPort.closePort(); //Здесь бывает ситуация Busy, которую не обработаешь - только если ожидать 30 serialPort.openPort(); 31 //Выставляем параметры 32 serialPort.setParams(SerialPort.BAUDRATE_9600, 33 SerialPort.DATABITS_8, 34 SerialPort.STOPBITS_1, 35 SerialPort.PARITY_NONE); 36 //Включаем аппаратное управление потоком 37 serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | 38 SerialPort.FLOWCONTROL_RTSCTS_OUT); 39 40 int tempData0 = 0; 41 42 while(true){ 43 Thread.sleep(1000); 44 int[] data = serialPort.getLinesStatus();//readString(event.getEventValue()); 45 //7 и 8 контакты замыкаются - 1010 46 //разомкнуты - 0010 47 //7 и 6 контакты замыкаются - 0110 48 //data[0] - 12 В на 8 (CTS) 49 //data[1] - 12 В на 6 (DCE) 50 //serialPort.setDTR(status); //Меняется напряжение только на 4 контакте - но и это хорошо 51 //serialPort.setRTS(status); // На 7 не меняется- можно это использовать How выход +-7В. 52 53 if (data[0] == 1){ 54 tempData0 = 1; 55 sendEmail("Лужа"); 56 System.out.println("1"); 57 } 58 if (data[0] == 0 && tempData0 == 1){ 59 tempData0 =0; 60 System.out.println("0"); 61 sendEmail("Нет лужи"); 62 } 63 } 64 } 65 catch (SerialPortException ex) { 66 System.out.println(ex); 67 } 68 catch (InterruptedException ty){} 69 70 } 71 72 private static void sendEmail(String text){ 73 74 try { 75 // Создаем address отправителя и прлучателя 76 InternetAddress from = new InternetAddress("*****@yandex.ru", "From"); 77 InternetAddress to = new InternetAddress("****@****.ru", "To"); 78 // Далее создаем т.н. транспорт с определенными параметрами, который 79 // будет "заниматься" отправкой messages 80 Properties props = new Properties(); 81 // Тип протокола, address serverа и номер порта 82 props.put("mail.transport.protocol", "smtp"); 83 props.put("mail.smtp.host", "smtp.yandex.ru"); 84 props.put("mail.smtp.port", "25"); 85 Session session = Session.getDefaultInstance(props); 86 Transport transport = session.getTransport(); 87 // Теперь создаем сообщение 88 MimeMessage message = new MimeMessage(session); 89 message.setText(text, "utf-8"); 90 message.setFrom(from); 91 message.setRecipient(Message.RecipientType.TO, to); 92 message.setSubject("Тема", "utf-8"); 93 // При подключении указываем параметры для smtp serverа: логин и пароль 94 transport.connect("*****@yandex.ru", "**Password***"); 95 transport.sendMessage(message, new Address[]{to}); 96 transport.close(); 97 } catch (UnsupportedEncodingException ex) { 98 ex.printStackTrace(); 99 } catch (NoSuchProviderException ex) { 100 ex.printStackTrace(); 101 } catch (MessagingException ex) { 102 ex.printStackTrace(); 103 } 104 } 105 106 } 107 기존 주소와 비밀번호를 설정하세요. (그런데 Yandex의 smtp 도움말에서는 포트 465에 대해 쓰여 있지만 인터넷에서는 포트 25를 찾았고 이것이 올바른 것으로 판명되었습니다. ). 실행을 시작해 보겠습니다. 우리는 연락처 7과 8을 닫고 3초 후에 1을 해제합니다 - 연락처가 닫히고 "Puddle" 문자가 전송됩니다. 0 - 연락처가 열려 있습니다 - "No Puddle" 문자가 전송됩니다. 이것이 내 메일에 있는 내용입니다 연락처를 닫고 편지를받습니다 - 10 . 우리는 연락처를 닫고 편지를받습니다 - 17 연락처를 닫고 편지를받습니다 - 11 연락처를 닫고 편지를받습니다 - 19 이제 신청서를 받고 싶습니다. 여기서 자료를 공부하는 동안 나는 울었습니다. 매니페스트 파일을 만들고, 클래스 패치를 등록하는 것이 정말로 필요한가요? 끔찍한 일입니다. Skipy는 이 모든 것을 설명합니다. 거의 포기할 뻔했는데 부엌 책상 서랍에 천공카드도 오래전엔 없었고, 아이디어가 있어서 아주 간단하게 항아리 보관함을 만들었어요. 연락처를 닫고 편지를받습니다 - 12 연락처를 닫고 편지를받습니다 - 21 연락처를 닫고 편지를받습니다 - 13 Build on Make 확인란을 선택하세요. Idea에서 다음 컴파일이 완료되면 결과가 out 폴더에 저장됩니다. 연락처를 닫고 편지를받습니다 - 14 모든 것이 분리되어 있고 매우 독립적이어서 어떤 경우에도 기계 내 어디에서나 복사되고 실행됩니다. 연락처를 닫고 편지를받습니다 - 15 하지만 그냥 실행하면 문자가 전송되지만 콘솔이 없으며 작업 관리자에서 해당 항목을 찾아야만 프로세스를 종료할 수 있습니다. 연락처를 닫고 편지를받습니다 - 16 다른 폴더로 전송하고 거기에서 시작하고 bat 파일을 만듭니다. 우리는 연락처를 닫고 편지를받습니다 - 17 우리는 연락처를 닫고 편지를받습니다 - 27 배치 파일을 실행합니다 연락처를 닫고 편지를받습니다 - 18 연락처를 닫고 편지를받습니다 - 29 . 여기에 콘솔이 있고 Ctrl + C를 사용하여 종료 요청을 합니다. 연락처를 닫고 편지를받습니다 - 19 연락처를 닫고 편지를받습니다 - 31 그러나 jar를 두 번 실행하면 두 번째 실행은 작동하지 않습니다. com 포트가 사용 중이게 됩니다. 따라서 한 번에 신청하는 것이 좋습니다. Launch4j를 설치하고 실행한 후 출력 파일을 선택합니다. 이름은 무엇이든 기본 창에서 exe이어야 하고 jar를 선택하고 콘솔 유형을 선택합니다. 최소 버전 1.4.0 많은 연락처를 닫고 편지를받습니다 - 20 연락처를 닫고 편지를받습니다 - 33 연락처를 닫고 편지를받습니다 - 21 연락처를 닫고 편지를받습니다 - 35 복사본이 필요하지 않음을 나타냅니다 연락처를 닫고 편지를받습니다 - 22 연락처를 닫고 편지를받습니다 - 37 . 기어가 있는 버튼 임시 파일을 저장할 위치를 묻는 질문에 Good Lak이라고 연락처를 닫고 편지를받습니다 - 23 대답합니다 . 모든 것이 준비되었습니다. 연락처를 닫고 편지를받습니다 - 24 연락처를 닫고 편지를받습니다 - 40실행 파일을 실행해 보겠습니다. 연락처를 닫고 편지를받습니다 - 25 사실, 디스패처에서는 여전히 javaw로 실행됩니다. 연락처를 닫고 편지를받습니다 - 26 편지가 옵니다 연락처를 닫고 편지를받습니다 - 43 . 그런 점에서 저는 Java를 좋아했습니다. 추신. 누출을 모니터링하는 가장 좋은 기계적 방법은 http://www.vse-sam.ru/10249-mexanicheskaya-sistema-dlya-kontrolya-i-predotvrashheniya-protechki-vody.html PPS입니다. 콘솔 출력은 특정 라인 수 이후 프로그램과 충돌하므로 갑자기 이 알고리즘을 반복하는 경우 콘솔 출력을 비활성화하는 것을 잊지 마십시오.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION