Ich bin ja nur Auszubildener und ein Geselle meinte, das ich nicht jedes mal ein neues Socket öffnen soll, weil es Speicherplatz weg nimmt, wen man jedes mal was neues öffnet.
wenn ich jetzt die close() Methoden bei allen SMS außer bei der letzten raus nehme, dann sieht der Code wie folgt aus:
package GSM_Modem;
import java.io.IOException;
import java.i

utputStream;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Scanner;
public class Modem
{
Socket socket = null;
Scanner scanner = null;
public static void main(String[] args) throws UnknownHostException,IOException, InterruptedException {
Modem modem = new Modem();
String text = "Test";
modem.sendMessage("(meine Telefonnummer)", modem.checkTextOfSpecialCharacter(text)+"(1)");
System.out.println(text + " " + text.length());
Thread.sleep(1000);
modem.checkOutput();
modem.sendMessage("(meine Telefonnummer)", modem.checkTextOfSpecialCharacter(text+"(2)"));
System.out.println(text + " " + text.length());
Thread.sleep(1000);
modem.checkOutput();
modem.sendMessage("(meine Telefonnummer)", modem.checkTextOfSpecialCharacter(text+"(3)"));
System.out.println(text + " " + text.length());
Thread.sleep(1000);
modem.checkOutput();
modem.sendMessage("(meine Telefonnummer)", modem.checkTextOfSpecialCharacter(text+"(4)"));
System.out.println(text + " " + text.length());
Thread.sleep(1000);
modem.checkOutput();
modem.closeSocket();
}
public void sendMessage(String nummer, String text)throws UnknownHostException, IOException {
OutputStream out = getSocket().getOutputStream();
PrintWriter printer = new PrintWriter(out, true);
System.out.println( "IsConnected: " + getSocket().isConnected());
System.out.println( "isOutputShutdown: " + getSocket().isOutputShutdown());
printer.println("<?xml version=\"1.0\"?> <cmgs destaddr=\"" + nummer + "\">" + text + "</cmgs>");
}
private String checkTextOfSpecialCharacter(String text)
{
if (text == null)
text = null;
List<Tuple> replaceData = new ReplaceCharList().getReplaceData();
for (Tuple tuple : replaceData) {
text = text.replaceAll(tuple.getVon(), tuple.getNach());
}
return text;
}
public void checkOutput() throws UnknownHostException, IOException, InterruptedException {
String str = null;
int timeout = 10;
int i = 0;
while (getScanner().hasNext() && i < timeout) {
str = getScanner().nextLine();
System.out.println("\r\n" + str);
Thread.sleep(1000);
i++;
}
ErrorCheck(str);
}
private void ErrorCheck(String str) {
if (str.contains("length=\"160\"")) {
System.out.println("\r\nDie Nachricht wurde zum Teil gesendet! (SMS wurde bis zum 160sten Zeichen versendet. Alle Zeichen darüber wurden nicht versendet!)");
} else {
if (str.contains("SMS accepted")) {
System.out.println("\r\nDie Nachricht wurde gesendet!");
} else {
if (str.contains("invalid token")) {
System.out.println("\r\nDiese Nachricht enthält ungültige Zeichen!");
} else {
System.out.println("\r\nunbekannter Fehler");
}
}
}
}
private Socket getSocket() throws UnknownHostException, IOException {
if (socket == null) {
socket = new Socket("172.29.0.25", 1432);
}
return socket;
}
private Scanner getScanner() throws UnknownHostException, IOException {
if (scanner == null) {
scanner = new Scanner(getSocket().getInputStream());
}
return scanner;
}
public void closeSocket() throws UnknownHostException, IOException {
getSocket().close();
}
public void closeScanner() throws UnknownHostException, IOException {
getScanner().close();
}
}
Aber jetzt tritt das Problem aus und gibt mir diese Exception
IsConnected: true
isOutputShutdown: false
Test 4
<?xml version="1.0"?><result><cmgs length="7">SMS accepted</cmgs></result>
Die Nachricht wurde gesendet!
IsConnected: true
isOutputShutdown: false
Test 4
Exception in thread "main" java.lang.NullPointerException
at GSM_Modem.Modem.ErrorCheck(Modem.java:84)
at GSM_Modem.Modem.checkOutput(Modem.java:80)
at GSM_Modem.Modem.main(Modem.java:31)