Du bist nicht angemeldet.

Werbeanzeige

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 764

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

1

31.05.2014, 02:36

Ports

Kann ich eine Anwendung auf mehrere Ports binden und beim Empfangen der Daten diesen identifizieren?

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

31.05.2014, 06:52

Ja.

BlueCobold

Community-Fossil

Beiträge: 10 880

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

31.05.2014, 07:42

Pro Port halt ein Socket.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nox

Supermoderator

Beiträge: 5 265

Beruf: Student

  • Private Nachricht senden

4

31.05.2014, 09:55

Dass es geht, weißt du ja nun. Rein aus Neugier: cui bono?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 764

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

5

31.05.2014, 14:37

Also einfach z.B. 5 Sockets und 5 Threads die receiven?
Wenn ich eine Methode habe und jeder Thread sie aufruft, kann es bei gleichzeitigen Aufrufen zu Problemen kommen oder "instanziert" sie jeder für sich?
Wie sieht es mit Variablen aus? Wenn jeder Thread an 1 Variablen liest, gibt es dann auch Probleme oder nur wenn jeder zu schreiben versucht?

Nur zur Info, ich plane eine Art Login-Server über TCP, vielleicht gehe ich ja falsch an die Sache ran.

JustSid

Frischling

Beiträge: 54

Beruf: Lead Idiot

  • Private Nachricht senden

6

31.05.2014, 15:31

Bevor du mit mehreren threads rumspielst, lies dich vorher lieber in die Materie ein!
Eine Funktion mit mehreren threads auszuführen geht, dafür braucht die nicht "instanziert" werden (das gibt es so für Funktionen eh nicht)!

Die Faustregel ist das mehrere threads von einer Variable oder Speicherstelle lesen können, da kann es nicht zu race conditions kommen... Der Speicher ändert sich ja nicht. Problematisch wird es wenn du einen thread hast der schreibt, weil dann kann es zu race conditions kommen. Das Problem ist das du unter umständen threads hast die versuchen zu lesen während ein anderer schreibt, oder zwei threads die schreiben. Je nachdem wie das Betriebssystem den threads CPU Zeit zuweist, kann das super gut gehen, oder dafür sorgen das du Variablen falsch einliest oder beschreibst (*)

Das ganze nur als grobe Übersicht, ausreichend um deine Frage zu beantworten. Aber noch nicht ansatzweise genug um wirklich multithreading zu machen! Das riesen Problem ist das es nicht deterministisch ist, und das kann 1000e läufe auf deinem Computer gut gehen und dann auf jedem Kunden Rechner kaputt gehen. Here be dragons!

(*) Dabei ist zu beachten das x86(-64) ein usually strongly memory ordering hat, sprich das du ein _bisschen_ atomic verhalten bekommst. Es ist keine strongly ordered memory Architektur, erlaubt aber mehr Dinge als weakly ordered memory ordering wie PPC oder ARM.

Edit: Du brauchst nicht für jeden port einen thread! Wenn es um ein Spiel geht solltest du eine run loop haben in der du deine ports fragen kannst ob sie Daten haben und die dann einlesen. Non-blocking I/O wäre hier das google Stichwort.
Jabberwock is killing user

David Scherfgen

Administrator

Beiträge: 10 195

Wohnort: Bonn

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

31.05.2014, 15:31

Warum brauchst du 5 verschiedene Ports?

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 764

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

8

31.05.2014, 15:51

Dass bis zu 5 Verbindungen zum Server ... man bin ich dumm -.-, ja 1 Port reicht.
Und der aber als extra Thread, weil sonst nicht mehr empfangen wird, solange der zum Beispiel in den Datenbanken herumschreibt/liest?
Oder ist das egal, weil es ein Stream-Socket ist und ich nacher alles auslesen kann was dazwischen angekommen ist?

Wie schon gesagt TCP-Login Server / Cloud Server sowas halt.

JustSid

Frischling

Beiträge: 54

Beruf: Lead Idiot

  • Private Nachricht senden

9

31.05.2014, 15:59

Der OS Kernel wird dir schon die Daten vorbehalten und nicht sofort wegwerfen wenn du sie nicht innerhalb der nächsten 5ns liest. Stream heißt nicht das du die Daten sofort empfangen und verarbeiten musst und ansonsten sind sie weg, der unterschied zwischen SOCK_STREAM und SOCK_DGRAM liegt im Protokoll und wie die daten konsumiert werden.
Stream sockets erlauben es dir Daten als beliebige byte Sequenzen zu lesen, sprich du kannst zbsp. 5x 40byte senden und das ganze als ein 200byte blob lesen, wohingegen Datagram sockets dich dazu zwingen auch wieder 5x 40 bytes zu lesen. Ansonsten ist halt noch der Unterschied das bei SOCK_STREAM, und daher TCP, die bytes in der Folge rausfallen wie sie reingefallen sind, und SOCK_DGRAM die die Datagramme in beliebiger Reihenfolge gibt (falls sie überhaupt bei dir ankommen).

Lustig das sich UDP viel besser dafür eignet "wirkliche" streams zu bauen
Jabberwock is killing user

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 764

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

10

31.05.2014, 16:12

Also kann ich problemlos einen Thread verwenden? Die initialen 4 Bytes die ein Client sendet geben dann die Größe seiner gesendeten Daten an, sodass das alles gelesen werden kann und mit dem nächsten weitergemacht wird.

Werbeanzeige