Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.09.2012, 22:03

C++ - WinSock - Chat

Hey liebe Community,
bin mal seit längerer Zeit wieder aktiv im Bereich Programmieren. Diesmal habe ich die Lust einen kleinen Chat mit Winsock zusammen zu basteln.
Dieser sollte auf dem Server-Client Konzept basieren, d.h. 2 Clients schließen sich zum Server an und können danach miteinander kommunizieren.
Das hauptsächliche Problem bei der Umsetzung sind die BlockingCalls. Ein Server könnte ja im Prinzip blocken und die Clients mit Select behandeln, aber bei dem Client wird es schwierig. Hier müsste man so etwas erstellen, wie abrufen, sobald eine Nachricht besteht und senden, sobald der "Submitbutton" betätigt wurde. Irgendwie müsste das ja gleichzeitig ablaufen, jetzt ist die Frage: Wie zum Geier kriege ich das hin? Welche Optionen bestehen oder gibt es eventuell einen anderen Weg? :hmm:

herzlichen Dank im Voraus!
lg. denniro
Only God can judge me.

Durza

Treue Seele

Beiträge: 104

Beruf: Student (MSc Cyber Security)

  • Private Nachricht senden

2

28.09.2012, 22:14

Darüber gibt es sehr viele hilfreiche Tutorials im Netz. Dieses Problem hatte ich übrigens auch schon einmal ;).
Deshalb habe ich ein darüber vor längerer Zeit einmal ein Tutorial gemacht, bin jedoch zurzeit daran, es zu überarbeiten.

Hier der Link:http://www.youtube.com/watch?v=yzqbQpxhLTs

Wenn du nur die ersten zwei Teile befolgst, hast du zum Schluss ein Chat Programm ;).

Aber zu deinem Problem:

Man kann blockierende Sockets auf versch. Arten behandeln, hier 2 davon:

1. Du benutzt asynchrone Sockets (Stichwort select-Funktion)
2. Du benutzt separate Prozesse (wird im Tutorial verwendet)

Ich hoffe ich konnte helfen!

Durza

EDIT: Ja, Ziel der Reihe ist ein kleines 2D "MMORPG". :D

3

28.09.2012, 22:24

Vielen Dank erstmal für die schnelle Anwort, ich schaue mir mal dein TuT an und gebe dir anschließend Feedback ;)
lg. denniro
Only God can judge me.

4

28.09.2012, 23:06

Dein Tutorial gefällt mir sehr gut, genau darauf wollte ich hinaus :D
Aber nun erstmal Threads anschauen(noch nie in Kontakt mit ihnen gekommen)
lg. denniro
Only God can judge me.

5

29.09.2012, 14:57

So der Chat funktioniert auf meinem PC - LOCALHOST perfekt. Nun würde ich gerne einem meiner Freunde, den Client schicken, um mit ihm den Chat zu testen, das Problem ist jedoch, dass ich nicht weiß, welche IPs ich angeben muss. Bitte um Hilfe, danke :)
Only God can judge me.

6

29.09.2012, 15:11

Die eigene IP kann man ja selber recht leicht herausfinden, z.B. per ipconfig. Das ist dann aber meist die Adresse im lokalen Netz, die Internetadresse kriegt man beispielsweise über http://www.whatismyip.org/.
Die ganzen Instantmessenger beruhen darauf, dass es einen Server mit fester Ip-Adresse (bzw. namen) gibt, den du dann fragen kannst, unter welcher IP-Adresse dein Freund gerade angemeldet ist. Ohne einen solchen Server muss er dir halt die Adresse so irgendwie mitteilen. Achja, man sollte natürlich auch darauf achten, gegebenenfalls die benutzten Ports im Router freizuschalten.
Lieber dumm fragen, als dumm bleiben!

7

29.09.2012, 15:23

Die eigene IP kann man ja selber recht leicht herausfinden, z.B. per ipconfig. Das ist dann aber meist die Adresse im lokalen Netz, die Internetadresse kriegt man beispielsweise über http://www.whatismyip.org/.
Die ganzen Instantmessenger beruhen darauf, dass es einen Server mit fester Ip-Adresse (bzw. namen) gibt, den du dann fragen kannst, unter welcher IP-Adresse dein Freund gerade angemeldet ist. Ohne einen solchen Server muss er dir halt die Adresse so irgendwie mitteilen. Achja, man sollte natürlich auch darauf achten, gegebenenfalls die benutzten Ports im Router freizuschalten.

Achso okay, also binde ich meinen Listen-Socket, an sagen wir mal PORT 8303(im Router freigeschaltet) und übergebe der Struktur noch meine globale IP, die ich bei wieistmeineip.de ablesen kann. Und der Client "connected" dann auf meine IP, die ich ihm dann übergebe(nur für TESTs).
Habe ich es richtig verstanden?
Danke für deine Antwort ;)
lg. denniro

EDIT: Ich habe es gerade, genauso wie beschrieben gemacht und als ich den Server gestartet habe, haben aufeinmal jede 2Sekunden Clients connected! Was habe ich falsch gemacht?
Only God can judge me.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »denniro« (29.09.2012, 15:29)


Durza

Treue Seele

Beiträge: 104

Beruf: Student (MSc Cyber Security)

  • Private Nachricht senden

8

29.09.2012, 15:55

Tut mir leid, dass habe ich im Tutorial noch nicht erklärt, das folgt in einem späteren Teil. Benutz die Adresse INADDR_ANY und als Port etwas oberhalb von 1200 zB. 1234.

Danach brauchst du noch Hamachi. Das ist ein Programm, welches simuliert, dass sich dein PC und der Pc deines Freundes im gleichen Netzwerk befinden. Ich arbeite zurzeit an einem Turorial dazu.




Durza

Durza

Treue Seele

Beiträge: 104

Beruf: Student (MSc Cyber Security)

  • Private Nachricht senden

9

29.09.2012, 15:55

Erklärung dazu: Dein PC hat, wie schon erwähnt eine statische IP, für einen Server brauchst du jedoch eine feste IP. Die Computer in einem Netzwerk kennen die IP's der anderen, deshalb funktioniert ein Server in einem Netzwerk auch ohne feste IP, da die Adresse des PC's dafür verwendet wird. Wenn du einen Server machen willst, musst du dir entweder eine feste IP kaufen oder Hamachi verwenden, wobei bei Hamachi nur jeweils 5 Clients auf deinen Server connecten können.

Durza

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Durza« (29.09.2012, 16:05)


10

29.09.2012, 16:03

Achso okey, werds mal versuche, aber mir wäre es ehrlich gesagt lieber , ohne Hamachi das ganze laufen zu lassen :)
lg. denniro

Achja, bitte antworte auf meine PMs demnächst xDD

EDIT: Es connecten weiterhin mehrere Clients auf den Server, obwohl ich den Client, nicht einmal gestartet habe, woran liegts? Port(1234) schon benutzt oder wie?
Only God can judge me.

Werbeanzeige