Ich habe einen Java-Server, der TCP und Sockets verwendet, um eine Verbindung zu einer Android-Anwendung (dem Client) herzustellen und Strings (derzeit aus einem Scanner-Objekt) gesendet, die dann als Benachrichtigungen vom Client angezeigt werden .Growl Weiterleitung an Java-Server
Servercode ohne alle Importe.
public class Server {
// define our Main method
public static void main(String[] args) throws IOException {
// set up our Server Socket, set to null for the moment.
ServerSocket serverSocket = null;
boolean isConnected = false;
// Lets try and instantiate our server and define a port number .
try {
serverSocket = new ServerSocket(6789);
isConnected = true;
System.out.println("*** I am the Server ***\n");
// make sure to always catch any exceptions that may occur.
} catch (IOException e) {
// always print error to "System.err"
System.err.println("Could not listen on port: 6789.");
System.exit(1);
}
// We always want to check for connection from Clients, so lets define
// a for ever loop.
for (;;) {
// define a local client socket
Socket clientSocket = null;
// lets see if there are any connections and if so, accept it.
try {
clientSocket = serverSocket.accept();
// don't forget to catch your exceptions
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
// Prepare the input & output streams via the client socket.
// fancy way of saying we want to be able to read and write data to
// the client socket that is connected.
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
PrintWriter outToClient = new PrintWriter(clientSocket.getOutputStream(),
true);
while (isConnected) {
// read a sentence from client
String hiFromClient = inFromClient.readLine();
// Set up the logging system and timestamp and log message.
Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter=
new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss");
String dateNow = formatter.format(currentDate.getTime());
try{
// Create file
File fstream = new File("log.txt");
FileWriter out = new FileWriter(fstream);
out.write(hiFromClient + " " + dateNow);
//Close the output stream
out.close();
} catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
// Print the client sentence to the screen
System.out.println("The Client said: "+hiFromClient);
// Reply to the client
Scanner scanner = new Scanner(System.in);
String sentence = scanner.nextLine();
outToClient.println(sentence);
System.out.println("The Server said: " + sentence);
}
// always remember to close all connections.
inFromClient.close(); // the reader
outToClient.close(); // the writer
clientSocket.close(); // and the client socket
}
}}
Growl verwendet Port 23053 für die Benachrichtigung Weiterleitung. Was ich zu tun hoffe, ist, auf 23053 zu hören und alles als String an den bei 6789 angeschlossenen Client zu senden. Bedauerlicherweise bindet Growl die Portnummer, so dass keine neue Socket-Verbindung hergestellt werden kann.
Irgendwelche Ideen, wie ich Benachrichtigungen von der Portnummer erhalten könnte, die growl verwendet, oder einfach knurl als Server für den Client selbst verwenden (der Code des Clients ist übrigens den Sockeln sehr ähnlich, nur mit Socket) seine Zerstörung Jede Hilfe wäre auf diese sehr geschätzt
von ServerSocket-), mein Gehirn
Alles Gute,
Patrick.
Danke für diesen Brian, ich gebe gerade einen Versuch, den Server als "Maschine mit Growl" unter Verwendung von jgntp (http://code.google.com/p/jgntp) registrieren zu lassen. Ich frage mich, wie ähnlich Gntp zu HTTP in Bezug auf die Paketübertragung ist, keine Ahnung, wie schlecht es abziehen, aber ich komme dorthin! – patrickjquinn