php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.04.2006, 13:16  
Erfahrener Benutzer
 
Registriert seit: 16.12.2003
Beiträge: 125
Broadcast
Standard PHP Socket Programmierung

Hi Leute,
eventuell is die Frage hier schonmal gestellt worden aber ich habe gesucht und leider nix passendes gefunden.

----------------------------------------------------
Ich habe 2 Rechner in einem Netzwerk, nun will ich mit PHP eine Verbindung herstellen zwischen beiden Rechnern, Rechner 1 muss ein Server sein der auf eine Anfrage wartet und diese dann ggf. weiter auswerten kann.
Und mit Rechner 2 will ich ein Interface haben wo ich z.B. wie in einem Chat einen String übertragen kann, dieser soll dann an Rechner 1 übergeben werden per UDP Verbindung.
An Rechner 1 soll dann eine Ausgabe kommen z.B. habe String empfangen namens "mein_string".
----------------------------------------------------

Gibt es eventuell einige Turorials die sehr einfach diesen Vorgang erklären bzw. wo man ihn Step-by-Step mitmachen kann? Oder könnt ihr mir eventuell sagen wie ich das machen kann, da ich von Socket Programmierung leider wenig Ahnung habe.

Gruß Broady & thx im vorraus
Broadcast ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.04.2006, 20:38  
Gast
 
Beiträge: n/a
Standard Re: PHP Socket Programmierung

Zitat:
Zitat von Broadcast
Gibt es eventuell einige Turorials die sehr einfach diesen Vorgang erklären bzw. wo man ihn Step-by-Step mitmachen kann?
Im Handbuch wird das ganze eigentlich recht verständlich erklärt. Fang einfach
einmal bei socket_create() an und klick Dich dann durch die Folgelinks.

http://php.net/socket_create

Eventuell auch noch interessant:

http://www.zend.com/pecl/tutorials/sockets.php
  Mit Zitat antworten
Alt 29.04.2006, 22:26  
Erfahrener Benutzer
 
Registriert seit: 16.12.2003
Beiträge: 125
Broadcast
Standard

Hi Danke,
das prob is ich bekomme immer 2 Fehlermeldungen, auch bei den Beispiel Codes:
---------------------------------------------------------------
Fehler 1:
Code:
Die angeforderte Adresse ist in diesem Kontext ungültig.
$address = '192.168.178.20';
$port = 1337;

Fehler 2:
Code:
Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden.
$address = '192.168.178.20';
$port = 80;
---------------------------------------------------------------

Die IP Adresse gibt es im Netzwerk, was soll ich tun? Was is das für ein Fehler und wie bekomme ich den gefixed?!
Broadcast ist offline   Mit Zitat antworten
Alt 30.04.2006, 12:04  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Broadcast
Fehler 1:
Code:
Die angeforderte Adresse ist in diesem Kontext ungültig.
$address = '192.168.178.20';
$port = 1337;
[...]
Die IP Adresse gibt es im Netzwerk
...ist dann aber wohl nicht Deinem Rechner zugeordnet.

Zitat:
Zitat von Broadcast
was soll ich tun?
Am einfachsten ist es meistens, die Adresse 0.0.0.0 mit dem Socket zu
verknüpfen, sodass auf alle dem Rechner zugeordneten IP-Adressen
reagiert wird.


Zitat:
Zitat von Broadcast
Fehler 2:
Code:
Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden.
$address = '192.168.178.20';
$port = 80;
Die Fehlermeldung sagt doch eigentlich schon alles. Die Socketadresse, die
Du hier benutzt, wird schon anderweitig verwendet (Apache, Skype, ...).
  Mit Zitat antworten
Alt 30.04.2006, 12:54  
Erfahrener Benutzer
 
Registriert seit: 16.12.2003
Beiträge: 125
Broadcast
Standard

Hmm also irgendwie scheint es trotzdem net zu funzen, hier ist mal der Code:

Code:
<?
echo "Start!";
set_time_limit (0);

$address = '0.0.0.0';
$port = 1337;

$sock = socket_create(AF_INET, SOCK_STREAM, 0);

socket_bind($sock, $address, $port) or die('Could not bind to address');

socket_listen($sock);

$client = socket_accept($sock);

$input = socket_read($client, 1024);

$output = ereg_replace("[ \t\n\r]","",$input).chr(0);

socket_write($client, $output);

socket_close($client);

socket_close($sock);
echo "End script!";
?>
Dort steht nun auch als IP 0.0.0.0 aber es kommt immernoch der Fehler mit:

Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden.

Ich hab leider NULL Plan was ich dagegen machen kann, egal was für eine IP & Port ich eintrage, es kommt immer dieser Fehler.
Broadcast ist offline   Mit Zitat antworten
Alt 30.04.2006, 13:22  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Broadcast
egal was für eine IP & Port ich eintrage, es kommt immer dieser Fehler.
Auch schon beim ersten Aufruf Deines Skripts? Oder erst nach erneutem Laden?

Wahrscheinlich lässt Du eine Instanz Deines Skripts weiterlaufen und startest
parallel eine weitere, sodass socket_close() nie aufgerufen bzw. das Skriptende
nie erreicht wird.
  Mit Zitat antworten
Alt 30.04.2006, 15:29  
Erfahrener Benutzer
 
Registriert seit: 16.12.2003
Beiträge: 125
Broadcast
Standard

Hab ich probiert, auch dann kommt der Fehler noch, hab sogar extra nenn Script gemacht mochmal extra zum Close aller socket connections aber es geht net. Immerwieder der gleiche Fehler mit bereits verwendet.
Ich habe Windows XP Pro, liegt es eventuell daran?! Woran könnte es liegen?
Broadcast ist offline   Mit Zitat antworten
Alt 01.05.2006, 19:14  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Broadcast
Hab ich probiert, auch dann kommt der Fehler noch
Deine Aussage kann eigentlich nicht zutreffen, da die von Dir gezeigte
Fehlermeldung von Windows stammt und besagt, dass die Adresse, an
die Du Deinen Socket knüpfen willst, bereits verwendet wird. Dem wird
wohl auch so sein. Und wodurch sollte es zur Belegung all dieser Adres-
sen kommen, wenn nicht durch Dein Skript?

Wie rufst Du Dein Skript eigentlich auf? Wenn das ganze - wieso auch
immer - über den Apachen o.ä. laufen sollte, sieh einmal in der access.log
nach, ob mehrere Zugriffe auf Dein Skript stattfinden.

Ansonsten teste einmal Folgendes:
PHP-Code:
<?php
$sock 
socket_create(AF_INETSOCK_STREAMSOL_TCP);
socket_bind($sock'0.0.0.0'4711);
socket_close($sock);
?>
Die Fehlermeldung erhälts Du auch hier?
  Mit Zitat antworten
Alt 01.05.2006, 19:26  
Erfahrener Benutzer
 
Registriert seit: 14.07.2004
Beiträge: 109
imported_Lumio
imported_Lumio eine Nachricht über ICQ schicken imported_Lumio eine Nachricht über AIM schicken
Standard

Hi!
ich hab mir das mal angeschaut... hier der code:
PHP-Code:
<?php
class SOCKET {
    function 
main() {
        
// Set time limit to indefinite execution
        
set_time_limit (0);
        
        
// Set the ip and port we will listen on
        
$address 'localhost';
        
$port 127;
        
$max_clients 10;
        
        
// Create a TCP Stream socket
        
$sock socket_create(AF_INETSOCK_STREAM0);
        
// Bind the socket to an address/port
        
socket_bind($sock$address$port) or die('Could not bind to address');
        
// Start listening for connections
        
socket_listen($sock);
        
        
/* Accept incoming requests and handle them as child processes */
        
$clients[]['socket'] = socket_accept($sock);
        
    while (
true) {
        
// Setup clients listen socket for reading
        
$read[0] = $sock;
        for (
$i 0$i $max_clients$i++)
        {
            if (
$client[$i]['sock']  != null)
                
$read[$i 1] = $client[$i]['sock'] ;
        }
        
// Set up a blocking call to socket_select()
        
$ready socket_select($read$write null$except null30);
        
/* if a new connection is being made add it to the client array */
        
if (in_array($sock$read)) {
            for (
$i 0$i $max_clients$i++)
            {
                if (
$client[$i]['sock'] == null) {
                    
$client[$i]['sock'] = socket_accept($sock);
                    break;
                }
                elseif (
$i == $max_clients 1) {
                    print (
"too many clients");
                }
            }
            if (--
$ready <= 0)
                continue;
        } 
// end if in_array
        
        // If a client is trying to write - handle it now
        
for ($i 0$i $max_clients$i++) // for each client
        
{
            if (
in_array($client[$i]['sock'] , $read))
            {
                
$input socket_read($client[$i]['sock'] , 1024);
                if (
$input == null) {
                    
// Zero length string meaning disconnected
                    
unset($client[$i]);
                }
                
$n trim($input);
                if (
$input == 'exit') {
                    
// requested disconnect
                    
socket_close($client[$i]['sock']);
                } elseif (
$input) {
                    
// strip white spaces and write back to user
                    
$output ereg_replace("[ \t\n\r]","",$input).chr(0);
                    
socket_write($client[$i]['sock'],$output);
                }
            } else {
                
// Close the socket
                
socket_close($client[$i]['sock']);
                unset(
$client[$i]);
            }
        }
    } 
// end while
        // Close the master sockets
        
socket_close($sock);
    }
}

$socket = new SOCKET;
$socket->main();
?>
Es kommt kein Fehler und ich kann mit telnet eine Verbindung aufbauen, jedoch kommt nichts zurueck
__________________
MFG
Lumio
imported_Lumio ist offline   Mit Zitat antworten
Alt 01.05.2006, 19:36  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Lumio
jedoch kommt nichts zurueck
Bei mir schon.
  Mit Zitat antworten
Antwort


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
Biete: PHP/MYSQL/AJax/Javascript Programmierung PhilipW Beitragsarchiv 8 22.04.2009 15:00
PHP, Socket und Threads Manuchau PHP-Fortgeschrittene 1 25.08.2006 10:38
Socket abhören PHP Tipps 2006 1 21.05.2006 20:19
Programmierung einer Seite? Roggi Trash 10 02.05.2006 15:27
Socket Client schnurzli PHP Tipps 2006 9 09.03.2006 20:49
[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
Denkfehler? Objektorientierte Programmierung... PHP Tipps 2007 17 23.11.2005 22:06
Socket error Eddaholzbein PHP Tipps 2005 1 25.04.2005 13:49
[Erledigt] Problem: Can't connect to local MySQL server through socket Datenbanken 3 01.03.2005 18:51
[Erledigt] Wer hilft mir bei der Programmierung (PHP) Off-Topic Diskussionen 3 15.11.2004 09:20
[Erledigt] Wer hat das Urheberrecht auf die Programmierung ? Off-Topic Diskussionen 17 27.10.2004 14:30
Socket Function in Php 5 aktivieren! Finkman PHP Tipps 2004 1 10.08.2004 16:18
socket tutorial? Eddaholzbein PHP Tipps 2004 9 09.07.2004 15:50

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php socket, php sockets, php socket server, socket php, php socket verbindung, php tcp socket, socket programmierung php, sockets php, socket verbindung php, php socket programmierung, php socket chat, normalerweise darf jede socketadresse nur jeweils einmal verwendet werden, socket verbindung mittels php, php socketprogrammierung, socket server php, normalerweise darf jede socketadresse (protokoll, netzwerkadresse oder anschluss) nur jeweils einmal verwendet werden, php socket class, php http socket, php server socket, die angeforderte adresse ist in diesem kontext ungültig

Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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.