(TCP?) Socket

MetroAffe

Mitglied
Hallo,

weiß garnicht ob ich hier im richtigen Unterforum bin. Bitte jedenfalls um verschiebung falls dass der Fall sein sollte.

Mein Problem:
Ich habe eine Website mit Buttons, wenn auf einen geklickt wird soll ein Befehl (String) an einen Server gesendet werden. Meiner Recherche nach funktioniert das ganze mit einem nur mit einem (TCP?) Socket vernünftig.
Derzeit funktioniert das zwar auch, allerdings ist es eine sehr unschöne Lösung, mit folgendem Ajax (jQuery) Snippet:
Code:
function funk(arg)
{
    $.ajax({
        url: 'http://192.168.2.109:8899',
        type: 'GET',
        data: arg
    });  
}

Und die Ausgabe dessen auf dem Server ist dann:
GET /?S122704 HTTP/1.1
Host: 192.168.2.109:8899
Connection: keep-alive
Accept: */*
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,cs;q=0.2,fr;q=0.2

arg war in diesem Fall: S122704
und das ist eigentlich auch das einzige was ankommen soll.

Wie ich das jetzt besser machen kann weiß zwar nicht, aber eigentlich sollte ein (TCP?) Socket die Lösung sein. Ich habe das nämlich mal mit Java ausprobiert und mir eine kleine Methode geschrieben - und es funktioniert genau so, wie es sollte. Das ganze sieht so aus:

Code:
	private static void sendCommand(String msgToServer) throws UnknownHostException, IOException {
		// Ip Adress and Port, where the Server is running on
		final String serverIP = "192.168.2.109";
		final int serverPort = 8899;

		Socket clientSocket = new Socket(serverIP, serverPort);// making the socket connection
		
		// OutputStream to Server
		DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
		outToServer.writeBytes(msgToServer);// sending the message
		
/*		
 * 		BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
 *      // BufferedReader from Server
 * 		String msgFromServer = inFromServer.readLine();
 *      // recieving the answer
 * 
 * 		Wird eigentlich nicht benötigt, aber ich denke in einem Skript notwenig um nicht ein Timeout in anspruch zu nehmen
 * 		Vom Server kann als Antwort ein belibiges Zeichen kommen (Derzeit ein Leerzeichen)
 * 
 */		
		clientSocket.close();// close the socket
	}
Wenn jemand dieses Prinzip in ein Web-tauglichen Code umwandeln könnte wäre dass dann denke ich optimal.

Dankeschön :D
MetroAffe
 
Zuletzt bearbeitet:
Könnte ... hatte ich auch überlegt, aber der Thread ist iwie undurchsichtig bis unklar - Auch wenns mein eigener ist ^^

Aber wenn du meinst es gehört eher da dazu dann nur zu ;)
 
Evtl. geht ja soetwas, funktioniert zwar nicht, aber vlt. habe ich auch etwas falsch gemacht:

Code:
var conn;
function funk(arg)
{
	conn = new WebSocket("ws://192.168.2.109:8899");
	conn.send(arg);
}
 
Hallo MetroAffe

WebSockets im Client -> WebSocket auf dem Server (Beispiele: Ratchet, Node.js, ...)

Ajax -> über HTTP-Protokoll.

Beides ist TCP, das high-level Protkoll musst du einfach auf dem Server verstehen. Direkt so binäre Streams wie es native Applikationen ausserhalb des Browsers machen können sind nicht die Idee eines Browserclients. Ajax und Websockets reichen völlig aus.

Viele Grüsse
Cromon
 
Also wie darf man das jetzt verstehen? Wenn ich einen Websocket auf der Website haben will benötige ich ihn auf dem Server?

Das wäre nämlich nicht möglich... Dann bräuchte ich eine andere Lösung oder es bleibt wie es ist
 
Hallo MetroAffe

Wie gesagt, wenn du im Client die Websocketlibraries verwendest musst du diese auch entsprechend auf dem Server so interpretieren. Wenn du etwas mit Websockets machst werden im Endeffekt anfänglich auch ganz normale HTTP-Requests versandt für den Handshake, anschliessend werden die Dateien flexibler geschickt, aber auch da mit einem speziellen Header. Deshalb brauchst du halt einfach einen Server der dieses spezifische Format auch versteht. Ansonsten bringen dir Websockets nichts.

Viele Grüsse
Cromon
 
Also dann ist das schonmal ausgeschlossen, gibt es eine andere Möglichkeit mit der man über TCP(bzw. Telnet richtig?) Strings senden kann?

Oder ist das ganze aus dem Browser raus anderst nicht machbar?
 
Hallo MetroAffe

Nein, kein Browser unterstützt aktuell rohe TCP-Sockets. Einzig Chrome hat experimental-mässig das drin, aber nicht offiziell unterstützt.

Viele Grüsse
Cromon
 
Zurück