php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.03.2006, 11:12  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard Socket Client

Hallo,

ich habe mir mithilfe der socket beispiele mit php im internet folgendes socket-script gebastelt:

das sollte es können:
der php-client erstellt einen socket und öffnet den port.
sobald ein server erreichbar ist, auf eingang warten. eine halbe sekunde warten, ob der server sendet. sonst sende ich selbst an den server...
dann antwortet der server wieder...

währenddessen soll der client immer auf empfang bleiben, falls der server etwas sendet...

ich habe es bereits mit zahlreichen schleifen probiert, komme aber auf keinen grünen zweig...

wie ändere ich meinen code, damit er 1. $data ausgibt - also socket_read() und 2. was muss ich tun, dass dieses script nur einmal schreibt: warte auf eingehende verbindungen. mir ist klar, dass dies derzeit deshalb ist, weil es ja innerhalb der while schleife ist, weiss aber nicht wie ich das sonst lösen soll...

bitte um rat


Code:

PHP-Code:
while ($socket socket_create(AF_INETSOCK_STREAM0)){
error_reporting (E_ALL);
set_time_limit(0);
$port 1234;
$host "ipadresse";

echo 
"Warte auf eine eingehende Verbindung...\n";

do{
if((@
socket_connect($socket$host$port)) < 0){
break;
}
echo 
"erfolg";
do {
if(
false === ($buf = @socket_read($socket1024))){
break 
2;
}
if(!
$buf trim($buf)) {
continue;
}
$data "";
$readEndCharacter ="\x03";
$data .= $buf;
$endString substr$buf, - strlen($readEndCharacter));
if(
$endString == $readEndCharacter)
echo 
$data;
break;
}while(
true);
} while(
true);

socket_close($socket);

schnurzli ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.03.2006, 11:21  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Bevor du dich mit einem Socket-Script auseinandersetzt solltest du dich an ein PHP-Manual deines Vertrauens wenden. Zumindest Frage 2 ist eine der leichtesten Übungen, wenn du dich ein bischen mit PHP beschäftigst.

Zu 1.
Code:
$data = "";
Überlege mal, was das macht
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 09.03.2006, 11:41  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

vielen dank für den tipp

wenn ich alles wüsste, würde ich nicht hier im firum nachfragen...

$data ="";
setzt data mal auf leer.

dann liest er per read_socket den empfang aus...
habe soeben daten empfangen... der server hat vorhin keine ordendliche verbindung gehabt. bez. der schleife... ich könnte es mit einer if abfrage erledigen...
schnurzli ist offline  
Alt 09.03.2006, 11:45  
Erfahrener Benutzer
 
Benutzerbild von dsmcg
 
Registriert seit: 11.10.2005
Beiträge: 2.405
dsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäre
Standard

1. Sehe ich kein einziges ? daher für mich auch keine Frage.
2. etwas funktioniert nicht warum entfernst du nicht die «@» Zeichen? (nur mal so zu Beginn)
__________________
Wie man Fragen richtig stellt
dsmcg ist offline  
Alt 09.03.2006, 13:07  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

ich habe es von slebst gelöst, schade nur, dass hier im board keine hilfe mehr zu erwarten ist... anscheinend wird hier nur profis geholfen...

für was es dann ein anfängerforum gibt...
vor allem die freundlichkeit lässt sehr zu wünschen übrig. auch wenn jemand nicht so gut ist wie ihr, könntet ihr ihm ein wenig freundlicher entgegnen. man kann das auch anders.

ein enttäsuchter schnurzli...
schnurzli ist offline  
Alt 09.03.2006, 13:11  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Merkwürdig, ich kann hier weder einen komischen Ton entdecken, noch eine Verweigerung zu helfen. Sorry, aber diese Seitenhiebe waren von dir völlig unnötig, damit bewirkst du nur, dass dir irgendwann erst recht keiner mehr helfen will...
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 09.03.2006, 13:11  
Erfahrener Benutzer
 
Benutzerbild von dsmcg
 
Registriert seit: 11.10.2005
Beiträge: 2.405
dsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäre
Standard

ja wir können freundlicher sein.

aber worauf sollen wir antworten wenn du nicht mal ein «?» schreibst?

wenn ein Script nicht läuft und man debuggen möchte, nimmt man mal sicher als erstes die @ Zeichen weg.

Es ist DEIN Problem, nicht unser, uns ist es ja egal ob du es lösen kannst oder nicht, daher muss man auch versuchen mit den anderen zu arbeiten und nicht nur «halbe Infos» herauszugeben sondern halt wirklich alles, je mehr desto besser.

wir sind keine Hellseher und wie gesagt kein «?» -> keine Frage -> keine Antwort (logisch eigentlich, oder?)
__________________
Wie man Fragen richtig stellt
dsmcg ist offline  
Alt 09.03.2006, 13:18  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

ok - werde mein problem detaillierter ausführen. ich probiere derzeit eine lösung...- ich melde mich wieder wenn ich auf ein weiteres problem stosse,

ist das ok so?
schnurzli ist offline  
Alt 09.03.2006, 14:34  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Selbstverständlich. Wir wollen hier alle helfen und freuen uns, wenn wir helfen können. Es gibt keine blöden Fragen, nur blöde antworten.

Es gehört nur dazu, dass ein Problem-Melder a) bereit ist, sich helfen zu lassen und b) bereit ist, zu lernen. Ob man blutiger Anfäger ist, der noch nie was von PHP gehört hat oder ob man Profi ist, spielt doch gar keine Rolle.

Wie gesagt, wenn ein Problem auftritt, versuche schon von Anfang an, ausführlich zu beschreiben, was du versuchst, was passiert und was du stattdessen erwartest. Zusammen mit dem verantwortlichen Script kann dir so schnell qualifiziert geholfen werden bzw. kann durch zielgerochtete Links so geholfen werden, dass du dir selfer helfen kannst. Wir wollen nix vorkauen, was man ohne zu verstehen abtipselt, sondern wollen, dass die Autoren lernen sich selbst zu helfen.

Lange Rede kurzer Sinn: Wenns Probleme hast, wende dich in freundlichem Ton hierher, dann kriegst du garantiert Hilfe.
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 09.03.2006, 20:49  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

und schon habe ich auch einige probleme...

1: dieses script stellt eine verbindung zum server her. wenn er etwas an mich sendet, antwortet mein script auch brav.
doch ich wenn der server nichts schreibt. z.b. beim start des scripts, dann soll mein client einen start string an den server schicken. doch wie bewerkstellige ich das? bei mir würde ich die funktion: send_ls nehmen...

weiters besteht noch immer der bedarf nach einem "warte auf eingehende verbindung..." text... wie mache ich so einen, dass er nicht immer mit der schleife wiederholt wird, solange keine verbindung besteht?


mein derzeitiger code:

Code:
<?	
function verarbeiten(){
	GLOBAL $data;
	GLOBAL $buf;
	GLOBAL $def;
	$data = "";
	$readEndCharacter =	"\x03";
	$data .= $buf;
	$endString = substr( $buf, - strlen($readEndCharacter));
	if($endString == $readEndCharacter)
	$newstring = substr($data, 1, -1);
	$def = substr($newstring, 0, 2);
	$finalstring = substr($newstring, 2);
	echo $finalstring;
	$arr = array();
	$arr = split("[|]", $finalstring);
	foreach ($arr as $one) {
		brk($one);
		}
}
function brk($finalstring)
{
	$var = substr($finalstring, 0, 2);
    GLOBAL $ARR_FIELD;
    $ARR_FIELD[$var] = substr($finalstring, 2);
}
function send_ls(){
	$date = date("ymd");
	$timestamp = time();
	$time = date("His",$timestamp);
	GLOBAL $msg;
	$msg = chr(02) . "LS|DA$date|TI$time|" . chr(03);
}
function send_ld(){
	$date = date("ymd");
	$timestamp = time();
	$time = date("His",$timestamp);
	GLOBAL $msg1;
	GLOBAL $msg2;
	GLOBAL $msg3;
	GLOBAL $msg4;
	GLOBAL $msg5;
	$msg1 = chr(02) . "LD|DA$date|TI$time|" . chr(03);
	$msg2 = chr(02) . "LR|cool|andererstring|" . chr(03);
	$msg3 = chr(02) . "LR|caal|ganzandererstring|" . chr(03);
	$msg4 = chr(02) . "LR|cool|undsoweiter|" . chr(03);
	$msg5 = chr(02) . "LA|DA$date|TI$time|" . chr(03);
}

while($socket = socket_create(AF_INET, SOCK_STREAM, 0)){
	error_reporting (E_ALL);
	set_time_limit(0);
	$port = 5001;
	$host = "ipadresse";
	do{
		if((@socket_connect($socket, $host, $port)) < 0){
		break;
		}
		do {
			if(false === ($buf = @socket_read($socket, 1024))){
			break 2;
			}
			if(!$buf = trim($buf)) {
			continue;
			}			
			verarbeiten();
			switch ($def) {
				case 'LS':
				send_ld();
				socket_write($socket, $msg1, strlen($msg1));
				socket_write($socket, $msg2, strlen($msg2));
				socket_write($socket, $msg3, strlen($msg3));
				socket_write($socket, $msg4, strlen($msg4));
				socket_write($socket, $msg5, strlen($msg5));
				break;
				case 'LA':
				break;
				case 'LE':
				break;
				case 'KR':
				save_key();
				break;
				case 'KD':
				del_key();
				break;
				case 'KA':
				send_ka();
				break;
			}	
		break;	
		}while(true);
		} while(true);
	socket_close($socket);
}
?>
schnurzli ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
java -> Connection reset by peer: socket write error brian johnson Off-Topic Diskussionen 8 12.02.2008 09:33
Zum eigenen Lernen: FTP Client für Filezilla dh1sbg PHP Tipps 2007 1 09.04.2007 10:57
Bildschirmschoner auf dem Client beenden superbike PHP-Fortgeschrittene 11 31.10.2006 19:54
PHP, Socket und Threads Manuchau PHP-Fortgeschrittene 1 25.08.2006 10:38
Client does not support authentication protocol... snoopiline Datenbanken 3 19.07.2006 13:53
.htaccess und FTP Client dh1sbg Off-Topic Diskussionen 7 28.06.2006 21:14
Socket abhören PHP Tipps 2006 1 21.05.2006 20:19
[Erledigt] MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
Can't connect to local MySQL server through socket zcmaster Datenbanken 0 17.02.2006 11:48
Client Problem Datenbanken 7 09.12.2005 14:38
Stabilität von SOAP (client) unter PHP5 ? Infos gesucht. PHP-Fortgeschrittene 5 13.09.2005 07:01
per Javascript exe auf Client starten HTML, Usability und Barrierefreiheit 16 05.09.2005 14:04
"Ping"-Skript -> "Ist Client verbunden im PHP-Fortgeschrittene 3 21.02.2005 01:35
[Erledigt] Client does not support authentication protocol requested by Datenbanken 0 11.12.2004 11:44
daten von client auf den server kopieren PHP Tipps 2004 4 23.06.2004 15:27

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php socket client, socket client php, php client socket, php socket beispiel, php socket client example, php socket, php sockets client, php socketclient, client socket verbindung php, php auf socket warten, socket erstellen php, php socket client beispiel, socket php client, php socket clients, php socket einführung, socket php client with authentication, client in php, php socket beispiele, client socket php, php html cocket client

Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.