Java 애플리케이션에서 SMS를 주고받을 수 있는 방법은 무엇인가요?
어떻게?
SMSLib라는 API가 있는데, 정말 굉장하다. http://smslib.org/
편집:
이제 API를 사용하여이 서비스를 제공 할 수있는 많은 Saas 제공 업체가 있습니다.
예: 메일침프, 에센덱스, 트윌리오, ...
Api 는 자바 가상 머신 (jvm) 에 가장 에스엠에스 i& # 39, ve seen 이스마프. It 강하심과, 사용하기 쉽고, 내가 내 자신을 엔터프라이즈급으로 응용 프로그램 (20K 통해 SMS 메시지를 보내는 매일) 을 사용할 경우 it.
>. 이 API 창조하 verbosity 줄이기 위해 기존 스마프 제공한다. >. # 39 it& 때문에 복잡한 감춰집니다 아주 간단하고 쉽게 사용할 수 있습니다. >. 수준이 낮은 자동으로 문의 등 통신 프로토콜 >. https://partner. 요청 응답.
네스모 [전송하십시오 에스엠에스] 를 사용할 수 있습니다 (https://www.nexmo.com/blog/2017/05/03/send-sms-messages-with-java-dr/) 뿐만 아니라 [구매시스템통합에 에스엠에스] (https://www.nexmo.com/blog/2017/05/31/receive-sms-messages-java-dr/).
Sms 를 보낼 수 있는 [네스모 jave 라이브러리란] (https://github.com/Nexmo/nexmo-java) 는 상당히 쉽습니다. 후에 [새 계정 생성] (https://dashboard.nexmo.com/sign-up), 가상 번호를 빌려 너회의 API 키가 점점 &. 암호 같은 에스엠에스 전송할지 라이브러리를 사용할 수 있습니다.
public class SendSMS {
public static void main(String[] args) throws Exception {
AuthMethod auth = new TokenAuthMethod(API_KEY, API_SECRET);
NexmoClient client = new NexmoClient(auth);
TextMessage message = new TextMessage(FROM_NUMBER, TO_NUMBER, "Hello from Nexmo!");
//There may be more than one response if the SMS sent is more than 160 characters.
SmsSubmissionResult[] responses = client.getSmsClient().submitMessage(message);
for (SmsSubmissionResult response : responses) {
System.out.println(response);
}
}
}
패키지 샘플링합니다.
가져오기의 제공합니다., java.io 가져오기의 java.util..
가져오기의 제공합니다.*, gnu.io
가져오기의 제공합니다.*, java.io
가져오기의 org.apache.log4j.chainsaw.Main.
가져오기의 sun.audio.*.
public class 그스 코너스 세리알포르테벤트리스트너 구축, 코메포트로너시프리스트너 {
개인 정적임 구체화하십시오 어울리다 = " COM6";; 이 COM 포트 연결 GSM 휴대폰 모뎀 또는 dell. 합니다 // 개인 구체화하십시오 메사주트링 = " ";; 개인 코메포르티덴티피어 portid 가 = null; 개인 열거도 파트리스트. 개인 린퍼타슬림 린퍼타슬림 = null; 개인 우스푸트스트림 우스푸트스트림 = null; 개인 세리올포트 세리올포트. 구체화하십시오 레더부퍼트리올 = " ";; / / 그스 코너스 새 인스턴스를 만듭니다. 공용 그스 코너스 (구체화하십시오 통신) {
티s.콤포트 = comm.
}
공용 부울입니다 init () { 파트리스트 = 코메포르티덴티프리스터게스포르티덴티피어스 (); 반면 (파트리스트리아스모릴레멘츠 () { = (코메포르티덴티피어) 파트리스트롬니스텔레먼트 portid 가 (); if (포르티d.제포르티페 () = CommPortIdentifier.PORT_SERIAL) { if (포르티d.제나미 그레퀄스 () (어울리다) { 시스템지우트리프린틀린 (잡을라는데 PortName" ";). 진정한 반품하십시오. } } } 반품하십시오 거짓값. }
public void 체크스테우스 () { 전송 (" \r\n" AT+CREG?;;). }
public void send (구체화하십시오 명령) { try { 우스푸트스트림트라이트 (스메데스제비츠 ()); (중 ioexception 이 e) {} catch 에드프린츠타크트라스 (); } }
public void sendMessage (구체화하십시오 phoneNumber, 문자열 메시지) { quote = & # 39, & # 39 챨 ";; 전송 (,, \r\n" " +quotes + phoneNumber +quotes+ " " AT+CMGS =); try { 트레더릭스리프 (2000년); (인터럽테데스세페시옹 e) {} catch Todo 자동으로 catch 블록 // 에드프린츠타크트라스 (); } // send (";;;;; + phoneNumber +" \" \r\n" " \" AT+CMGS =); 전송 (# 39, & # 39, 메시지 + \032&). 시스템지우트리프린틀린 (메시지 Sent" ";). }
public void 종료 () { 전송 (" ATH\r\n";). }
public void 누얼포인터렉세페시옹 던지는 접속하십시오 () { if (portid 가! = null) { try { 포르티d.아다포트로너시프리스트너 (이);
= (세리올포트) 세리올포트 포르티d.오픈 (" MobileGateWay",, 2000년); 세리올포트리스체리올포트파람스 (,, SerialPort.STOPBITS_1 115200 SerialPort.DATABITS_8 SerialPort.PARITY_NONE); (포르티뉘스엑스티온 언스포르테드콤모페라티온렉세페시옹 e) {} catch 에드프린츠타크트라스 (); }
try { 린퍼타슬림 = 세리올포트리게티노푸트스트림 (); 우스푸트스트림 = 세리올포트.게투푸트스트림 ();
(중 ioexception 이 e) {} catch 에드프린츠타크트라스 (); }
try { / 그것은꿈의 이벤트를 about * 알고 싶다. 세리올포트리아데벤트리스트너 (이); 세리올포트자노티프리온다타라바일이블 (true). 세리올포트자노티프현링인디카토르 (true). (토마니리스트너스엑스티온 e) {} catch 에드프린츠타크트라스 (); }
Sim 카드 //register 홈 네트워크
전송 (" ATZ\r\n";).
} else { 새로운 것을 누얼포인터렉세페시옹 (" ", COM 포트 찾을 수 없습니다!!;). } }
public void 세리아레벤트 (세리알포르테벤트 세리알포르테벤트) { 스위치 (세리알포르테벤트리게티븐티페 () { 케이스 세리알포르테벤트릭비: 케이스 세리알포르테벤트리오스: 케이스 세리알포르테벤트리프: 케이스 세리알포르테벤트리프: 케이스 세리알포르테벤트리스트: 케이스 세리알포르테벤t.c츠: 케이스 세리알포르테벤트리즈라: 케이스 세리알포르티븐스자리: 케이스 SerialPortEvent.OUTPUT_BUFFER_EMPTY: 케이스 SerialPortEvent.DATA_AVAILABLE:
바이트입니다 바이트입니다 레더부퍼 = new [] [2048년]; try { 반면 (린퍼트슈타림드라바일이블 > (); 0) { int 누기이티스 = 린퍼트스트리아마드리드 (레더부퍼);
시스템지우트리프린트 (누기이티스); if ((레더부퍼스트로스링 ()) 스콘테인스 (RING" ";)) { 시스템지우트리프린틀린 (" 입력하십시오. δ1 경우, 링 Loop").
} }
시스템지우트리프린트 (새 문자열 (레더부퍼)); (중 ioexception 이 e) {} catch } 브레이크. } } public void 우스코먼드 () { 시스템지우트리프린트 (레더부퍼트리올); } public void 우너시프창레 (int 유형용) { 스위치 (유형용) { 케이스 CommPortOwnershipListener.PORT_UNOWNED: 시스템지우트리프린틀린 (포르티d.제나미 () + ": PORT_UNOWNED"). 브레이크. 케이스 CommPortOwnershipListener.PORT_OWNED: 시스템지우트리프린틀린 (포르티d.제나미 () + ": PORT_OWNED"). 브레이크. 케이스 CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED: 시스템지우트리프린틀린 (포르티d.제나미 () + ": PORT_INUSED"). 브레이크. }
} public void 클로스포르트 () {
세리올포트리클로스 (); }
public static void main (구체화하십시오 args []) { 그스 코너스 유럽형 이동전화 (gsm) = new 그스 코너스 (어울리다); if (그스마리니스 () { try { 시스템지우트리프린틀린 (초기화하지 Success" ";). 그스마리코너스 (); 트레더릭스리프 (5000), 그스마리히크스테우스 (); 트레더릭스리프 (5000),
그스마리젠드메사게 (,, 평가판의 " +91XXXXXXXX" " Success").
트레더릭스리프 (1000년);
그스마리앙구프 (); 트레더릭스리프 (1000년); 그스마리클로스포르트 (); 그스마리우스코먼드 (); 시스템.렉시스 (1).
(예외 e) {} catch 에드프린츠타크트라스 (); } } else { 시스템지우트리프린틀린 (" Can& # 39, t, init 이 card"). } }
}
Socket smppSocket = new Socket("YOUR_MODEM_IP", YOUR_MODEM_PORT);
DataOutputStream os = new DataOutputStream(smppSocket.getOutputStream());
DataInputStream is = new DataInputStream(smppSocket.getInputStream());
os.write(some_byte_array[]);
is.readLine();
그렇지 않으면, ll 작동합니까 COM 포트, 하지만 이 방식은 you& # 39 를 통해 자세한 내용을 확인하실 수 있습니다 (AT 명령을 보내는) 같은 시리얼 포트를 사용하는 방법을 here.
내가 제안하세요 같은 클라우드 기반 솔루션을 트와이리오. 클라우드 기반 솔루션은 경제적인 사내 솔루션 등 지속적인 관리가 필요한 것보다, 없다. SMS 솔루션인 e 메일을 통해 얻은 정보를 얻을 수 있을 때 배송업체에 우아한 아닐 수 없다 할 수 있는 모든 모바일 번호를 텍스트 사용자 및 합니다. 나는 내 에서 java api 를 사용하여 웹 애플리케이션, 트와이리오 전송할지 에스엠에스 세르베르사이드. 통합 앱 몇 분 내에 수 있습니다.
https://www.twilio.com/docs/java/install
예를 들어, SMS 메시지 보내기 here& s # 39 의 문서:
import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.MessageFactory;
import com.twilio.sdk.resource.instance.Message;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import java.util.ArrayList;
import java.util.List;
public class Example {
// Find your Account Sid and Token at twilio.com/user/account
public static final String ACCOUNT_SID = "{{ account_sid }}";
public static final String AUTH_TOKEN = "{{ auth_token }}";
public static void main(String[] args) throws TwilioRestException {
TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);
// Build a filter for the MessageList
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("Body", "Test Twilio message"));
params.add(new BasicNameValuePair("To", "+14159352345"));
params.add(new BasicNameValuePair("From", "+14158141829"));
MessageFactory messageFactory = client.getAccount().getMessageFactory();
Message message = messageFactory.create(params);
System.out.println(message.getSid());
}
}
오마크리스 프랫 API. # 39 의 기준으로 스마프 it& 역시 무료로 과 시뮬레이터
LOGICA 스마프 제공한다.
그리고 또 다른 옵션은 칸넬 무료 WAP · 에스엠에스 게이트웨이입니다.
그 단축 코드 공유됨 액세스하면 테스트마르크스 보기입니다 송수신하도록 문자 메시지를 통해 app 에서 그들의 제공한다. 메시지 / to come from 41411 (대신 예를 들어 임의적입니까 전화 및 e 메일 게이트웨이에는 달리 전체 160 자 # 작업할 수 있습니다).
또한 다양한 기능을 할 수 있는 키워드 (s) 를 텍스트로 떠날려하면 백성중에 41411 호출하십시오 in your app 은 JAVA API 클라이언트와 함께 널리 사용되는 언어 및 기타 여러 있어 매우 포괄적인 문서 및 기술 지원.
14 일 무료 평가판의 여전히 그들의 앱 개발자를 위한 테스트 및 건물 아웃해야 쉽게 확장할 수 있습니다.
여기에 체크아웃합니다. 테스트마르크스 apiu 정보
또한 사랑이었냐고요 왕베셀 에서 Java 언어의 답변됨 수 있지만, 우리는 이 질문에 detaiils 없이 이후 미삭 apiu 다루는 대부분의 기존 요구 사항:
curl -X "POST" https://api.wavecell.com/sms/v1/amazing_hq/single \
-u amazing:1234512345 \
-H "Content-Type: application/json" \
-d $'{ "source": "AmazingDev", "destination": "+6512345678", "text": "Hello, World!" }'
Http 요청을 보내는 이걸봐 질문을합니다 문제가 있을 경우 자바 가상 머신 (jvm) 에:
구체적인 사건에 대한 사용을 고려해보십시오 수도 있습니다. 스마프 apiu 및 이스마프 라이브러리란 이미 밝힌 바 있는 도움이 될 것입니다.