Netzwerkspielerei
Übersicht

![]() |
maboxBetreff: Netzwerkspielerei |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, hab heute mal angefangen mich ein bisschen mit Netzwerksachen zu beschäftigen. Ich hab Rob's Tutorial durchgelesen und ein bisschen ausprobiert. Nun ist da ein kleines Programm mit dem man auf Internetseiten, aber anscheinend auch auf andere Rechner zugreifen kann. Das mit den Internetseiten hab ich einigermaßen hinbekommen.
Dann wollte ich auf meinen Zweitrechner zugreifen, hab die IP adresse eingegeben aber dann kommt "Memory access violation" Das Programm sieht so aus Code: [AUSKLAPPEN] server$ = Input("Adresse>") ; Die Adresse eingeben (IP-Adresse oder z.B. robsite.de)
stream = OpenTCPStream(server$, 21) ; Die Verbindung zum Server auf Port 21 herstellen. ; Die Input/Output-Schleife Repeat ; Alles was der Server einem schickt auslesen und printen. l$ = ReadLine$(stream) Print l$ ; Kommandos eingeben lassen und selbige an den Server schicken. i$ = Input(">") WriteLine stream, i$ ; Solange wiederholen bis man 'ende' eingibt. Until i$ = "ende" End Wo liegt der Fehler? muss ich auf dem anderen Rechner erst irgendwas starten damit der überhaupt was sendet? |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
- Zuletzt bearbeitet von mabox am Do, Feb 14, 2008 23:31, insgesamt 2-mal bearbeitet
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Beim Code testen Debugger anmachen, dann siehst du immerhin in welcher Zeile das ganze ist. Als Information oft sehr hilfreich (Debugger gibts nicht umsonst)
2. Ja, auf dem anderen Rechner muss der Port offen sein und ein Programm auf dem Port laufen, sonst kriegst du diesen Fehler, wenn du von "stream" lesen willst. |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und die frage ist es ein UDP oder TCP Port.
Am besten du Codest noch einen Server für dein Programm dann kannst du auf dem einen PC den Server laufen lassen und von dem anderen vom client aus Befehle an diesen Sende. Ich hab früher mal sowas in C gemacht: Server: Code: [AUSKLAPPEN] #include <winsock2.h> #include <stdio.h> //Prototypen int startWinsock(void); int main() { long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; char buf[256]; char buf2[300]; // Winsock starten rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } // Socket erstellen acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); } // Socket binden memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(12345); addr.sin_addr.s_addr=ADDR_ANY; rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket an port 12345 gebunden\n"); } // In den listen Modus rc=listen(acceptSocket,10); if(rc==SOCKET_ERROR) { printf("Fehler: listen, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("acceptSocket ist im listen Modus....\n"); } // Verbindung annehmen connectedSocket=accept(acceptSocket,NULL,NULL); if(connectedSocket==INVALID_SOCKET) { printf("Fehler: accept, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Neue Verbindung wurde akzeptiert!\n"); } // Daten austauschen while(rc!=SOCKET_ERROR) { rc=recv(connectedSocket,buf,256,0); if(rc==0) { printf("Server hat die Verbindung getrennt..\n"); break; } if(rc==SOCKET_ERROR) { printf("Fehler: recv, fehler code: %d\n",WSAGetLastError()); break; } system(buf); printf("Client sendet: %s\n",buf ); sprintf(buf2,"Folgender Befehl wurde ausgefuehrt %s",buf ); rc=send(connectedSocket,buf2,strlen(buf2),0); } closesocket(acceptSocket); closesocket(connectedSocket); WSACleanup(); system("PAUSE"); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } Client: Code: [AUSKLAPPEN] #include <winsock2.h> #include <stdio.h> //Prototypen int startWinsock(void); int main() { long rc; SOCKET s; SOCKADDR_IN addr; char buf[256]; // Winsock starten rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } // Socket erstellen s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); } // Verbinden memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family=AF_INET; addr.sin_port=htons(12345); // wir verwenden mal port 12345 addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError()); getchar(); return 1; } else { printf("Verbunden mit 127.0.0.1..\n"); } // Daten austauschen while(rc!=SOCKET_ERROR) { printf("\nZeichenfolge eingeben [max 256]: "); gets(buf); // gets ist das selbe wie cin>> send(s,buf,strlen(buf),0); rc=recv(s,buf,256,0); if(rc==0) { printf("Server hat die Verbindung getrennt..\n"); break; } if(rc==SOCKET_ERROR) { printf("Fehler: recv, fehler code: %d\n",WSAGetLastError()); break; } buf[rc]='\0'; printf("\nServer antwortet: %s\n",buf); } closesocket(s); WSACleanup(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } Der Port ist hier 12345 im Lan geht es auch ohne Port freigaben. Der Client und der Server sind nicht Perfekt aber ich hab das auch nie komplett fertig gemacht das Programm. Man kann halt z.b. so Sachen wie Paint, Editor, Taschenrechner etc. auf dem Server laufen lassen. Wie das alles in Blitz Basic geht hab ich mir noch nicht angekuckt. |
||
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für eure Antworten.
Wenn ich den Debugger anmache kommt die Meldung "stream doesn't exist" Das mit dem Port wusste ich noch nicht. Wie öffnet man den, bzw. was muss das Programm machen das auf dem anderen Rechner läuft? Ich denke es ist ein TCP Port, da ich das Programm aus einem TCP Tutorial hab. Leider bringt mir der Code von Bassmaster nichts weil ich fast nichts von C verstehe. |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du via Internet gehst muss der Port im Router offen sein. Da kannst du mit deinem Programm nichts machen. Port nicht offen -> keine Verbindung -> Stream does not exist fehler. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie macht das dann z.B. ICQ ?
und wie ist das wenn es nur mit einer LAN Verbindung mach? |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry wegen Doppelpost, aber ich will das unbedingt noch hinbekommen.
Ich hab jetzt nen kleines Programm geschrieben, welches eine Nachricht an den anderen PC senden sollte, aber irgendwie funktionierts nicht. Woran liegt das? Code: [AUSKLAPPEN] ip$ = Input ("IP eingeben: ")
tcp = OpenTCPStream(ip$, 21) WriteLine tcp, "hallo Welt" Print "Ok" CloseTCPStream(tcp) WaitKey End Muss ich eigentlich auf beiden PC's die IP des anderen eingeben? und muss ich die NetzwerkIP oder die PC IP eingeben? Vielen Dank für eure Hilfe! |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Programm kann gar nicht funktionieren, denn es reicht nicht wenn einer sendet. Auf dem anderen PC muss auch gelauscht werden. Wenn jeder jedem anderen einfach so Nachrichten senden könnte hätte man das Internet sicher schon lange abgeschaltet weil du alle 3 ms von irgendeinem Trottel mit news die du nicht willst zugebombt würdest. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zum lauschen hab ich das Programm in meinem ersten Post, aber es funktioniert eben nicht wenn ich beide programme auf verschiedenen Rechnern starte.
nochmal zur Frage, muss ich auf beiden Rechnern die IP des anderen eingeben? und ist das erste Programm überhaupt richtig zum auf das andere lauschen? |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Will jetzt mal nicht so sein hier ein Kleines Beisp.
Das ist der Server: Code: [AUSKLAPPEN] tcp = CreateTCPServer(12834);Würde nicht 21 nehmen weil das der Port für FTP ist Timer=CreateTimer(60); Timer erstellen sonst ist die CPU außlastung sehr hoch Repeat ; Schleife erstellen WaitTimer Timer;warten auf Timer Signal=AcceptTCPStream(tcp);Wenn jemand sich mit dem Server Verbindet If Signal Then ;Wenn es jemand macht dann... Txt$=ReadLine$(Signal);Lese den text Print Txt;Schreibe diesen WaitKey ;Warten bis Taste Gedrückt End ;Ende EndIf If KeyHit(1) Then End ; Wenn Esc denn beenden Forever;Schleifenende CloseTCPServer(tcp);Schlißen des Servers Das ist das Programm welches Daten an den Server senden kann. (das was du geschrieben hast) Code: [AUSKLAPPEN] ip$ = Input ("IP eingeben: ") tcp = OpenTCPStream(ip$, 12834) WriteLine tcp, "hallo Welt" Print "Ok" CloseTCPStream(tcp) WaitKey End |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mabox hat Folgendes geschrieben: Wie macht das dann z.B. ICQ ?
Bei ICQ hats nen zentralen Server der die Verbindung entgegen nimmt, deswegen muss da bei den meisten Usern nichts gemacht werden. Denn ausgehend geht immer sofern nicht paranoide Sicherheitssettings drin sind. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Ich
Vielen Dank jetzt klappts einigermaßen, also in die eine Richtung gehts aber in die andere irgendwie noch nicht, liegt vielleicht daran, dass auf dem einen PC Vista ist und auf dem anderen XP @Dreamora Kann man sich so einen Server (einfach) selbst erstellen? |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, aber es ist nicht einfach.
Wenn du einen (alten) PC hast, der ständig mit dem Internet verbunden ist, kannst du das einrichten. Die einfachste Möglichkeit wäre wahrscheinlich DynDNS, aber das ist letztendlich dir überlassen. Hast du einen alten PC + DSL Flatrate + (evtl.) Router mit Port Forwarding? Für dein Problem mit dem Senden einer Nachricht an einen Zweitrechner ist das allerdings irrelevant, denn ein Server lohnt sich nur, wenn du viele Clients hast, die sich die Informationen vom zentralen Server herunterladen müssen. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mein eigentliches Ziel ist es ein kleines Programm zu schreiben welches Dateien von einem Ort zum andern schickt, möglichst schnell und unkompliziert. Ich fände es einach gut wenn nicht jeder benutzer des Programms an seinem Router Ports freigeben muss, deshalb wäre ein Zweitrechner garnicht schlecht. Mit DynDNS kenn ich mich garnicht aus, aber das kann ich ja noch lernen.
Ja, einen Zweitrechner und eine DSL Flat hab ich aber ich weis nicht was Port Forwarding ist.(?) |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: aber ich weis nicht was Port Forwarding ist
Port Forwarding sollte eigentlich jeder Router besitzen. Wenn du keinen Router hast und dein PC eine direkte Internetverbindung hat, musst du dich nicht darum kümmern. Zitat: [...] möglichst schnell und unkompliziert.
Dann brauchst du einen zentralen Server. Dort solltest du ein möglichst sicheres Betriebssystem installieren. Ob es nun Linux oder Windows sein soll, bleibt deine Wahl. Ich würde es an deiner Stelle mit C++ für Linux realisieren, aber wenn der Server mit BB umgesetzt wird, muss es ein Windows-Server sein. Der Ablauf des Clientprogramms sollte so aussehen: 1. Benutzernamen eingeben 2. Globale IP-Adresse bestimmen 3. Mit zentralem Server verbinden und diesem den Benutzernamen und die dazugehörige IP mitteilen 4. Warten, bis jemand eine Datei senden möchte und ggf. Datei empfangen Das Serverprogramm: 1. Auf "Anmeldungen" warten 2. Alle aktiven Clients in einer Datenbank speichern 3. Clients, die sich seit einiger Zeit nicht mehr melden, aus der Datenbank löschen 4. Auf IP-Anfragen bezüglich des Benutzernames warten und ggf. dem jeweiligen Benutzer eine Nachricht schicken Du solltest auf jeden Fall darauf achten, dass du den Empfänger darüber informierst, dass ihm jemand eine Datei schicken möchte und fragen, ob er dies zulassen will oder nicht. Wenn die Dateiübertragung akzeptiert wurde, musst du dich mit dem jeweiligen PC verbinden und auf Antworten warten. Dies ist nur eine von vielen Möglichkeiten, aber ich würde es auf diese Art und Weise implementieren. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank!
Ich versuch das Beste daraus zu machen. |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group