Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von alf468
Thema: Daten senden
Am im Forum: Netzwerktechnologien

Danke Rainbird !
Wenn ich zB eine exe Datei sende wird die nicht richtig übertragen,was sicher am Encoding liegt.

Client:

TcpClient client = new TcpClient();
							client.Connect(IPAddress.Parse(this._clientdata[i-1].ToString()), 7777 );
							NetworkStream stream = client.GetStream();
							StreamReader reader = new StreamReader(this.openFileDialog1.FileName,Encoding.ASCII);
							StreamWriter writer = new StreamWriter(stream);
							writer.Write(reader.ReadToEnd());
							writer.Flush();
							writer.Close();
							reader.Close();
							client.Close();

Server:

TcpListener listener = new TcpListener(7777);
			listener.Start();
			Socket socket = listener.AcceptSocket();
			NetworkStream stream = new NetworkStream (socket, FileAccess.ReadWrite,false );
			StreamReader reader = new StreamReader(stream,Encoding.ASCII);
			StreamWriter writer = new StreamWriter(this.saveFileDialog1.FileName);
			writer.Write(reader.ReadToEnd());
			writer.Flush();
			writer.Close();
			reader.Close();
			listener.Stop();

Was für ein Coding soll ich da nehmen?

Edit: Hat sich erledigt,habe Default genommen
Gibt es eine Möglichkeit den Status anzeigen zu lassen??

Thema: Daten senden
Am im Forum: Netzwerktechnologien

Ich suche jetzt schon die ganze Zeit nach Hinweisen wie man Dateien per NetworkStream versenden kann.
Könnte man eine Datei in byte[] umwandeln.versenden und dann wieder von byte[] in Datei umwandeln ?

Thema: mehrere Schriftarten
Am im Forum: GUI: Windows-Forms

Problem gelöst

Thema: mehrere Schriftarten
Am im Forum: GUI: Windows-Forms

Ich steige nicht ganz durch
Soweit wie ich verstanden habe muss man das mit dem StringBuilder machen.

Thema: mehrere Schriftarten
Am im Forum: GUI: Windows-Forms

this.textBox2.Rtf=this.textBox2.Rtf+this.textBox1.Rtf

Das geht so nicht,denn da wird nur der Rtf Code von TextBox2 eingefügt X(

Thema: mehrere Schriftarten
Am im Forum: GUI: Windows-Forms

Danke Programmierhans für den Hinweis,aber ich will es erstmal mit meiner Methode probieren.
Es geht auch alles soweit nur wenn ich einen farbigen Text in TextBox1 eingebe wird dieser Text nicht so in TextBox2 dargestellt.Man kann auch leider nicht die RTF Codes zusammenfügen

Thema: mehrere Schriftarten
Am im Forum: GUI: Windows-Forms

Danke herbivore

Thema: mehrere Schriftarten
Am im Forum: GUI: Windows-Forms

Ich denke viele kennen ICQ und dort gibt man seinen Text ein und klickt auf senden. Der eigene Name wird anders farbig dargestellt als der von gegenüber. Ich möchte das in meinem Chat Programm auch so haben.
Ich nutze dazu die RichTextBox.

this.textBox2.Text=this.textBox2.Text+"\r\n"+Environment.UserName+" schrieb um "+DateTime.Now.ToString("H:mm:ss")+" "+ this.textBox1.Text;
					String text=Environment.UserName+" schrieb um "+DateTime.Now.ToString("H:mm:ss")+" "+ this.textBox1.Text;
					this.textBox2.SelectionStart=this.textBox2.TextLength-text.Length;
					this.textBox2.SelectionLength=user.Length;
					this.textBox2.SelectionColor=Color.Red;
					this.textBox2.SelectionFont=new Font("Comic Sans",15);

So wird der Name zwar anders hinterlegt aber bei nächsten Senden wird nur der Name welcher als letzten geschrieben wurde markiert.

Thema: Form überschreiben
Am im Forum: GUI: Windows-Forms

Eigentlich ganz logisch
Wenn ich die ganze Form hinzufüge sieht das ja nicht so schön aus (Form im Form ) ,deswegen habe ich mich lieber für das Panel entschieden.

Danke

Thema: Form überschreiben
Am im Forum: GUI: Windows-Forms

Das ist mir klar und ich bin auch vertraut mit der OO
Aber bei diesem Problem finde ich irgendwie keine Lösung und ich bin keiner von denen die direkt Fragen ohne vorher nachzudenken!!

Mir ist klar das wenn ich alles in eine Klasse schreibe es einfach ist die Form zu überschreiben.Aber ich habe nun mal eine 2.Klasse wo das 2.Fenster aufgebaut ist und dieses 2.Fenster möchte ich gerne in der 1.Form anzeigen lassen.

Thema: Form überschreiben
Am im Forum: GUI: Windows-Forms

Zitat
Original von Programmierhans
Sorry ich will Dich ja wirklich nicht beleidigen, aber ich empfehle Dir mal ein gutes Buch über .Net und OO zu lesen, damit Du mal die Grundkonzepte der OO-Entwicklung kennenlernst ...

Ein Buch kannst jedem Empfehlen der eine Frage hat und sich damit selber auseinandersetzten soll.
Aber Danke für den Tipp mit dem UserControl mal schauen wie das so geht

Thema: Form überschreiben
Am im Forum: GUI: Windows-Forms

Kann man einer Form keine andere Forum zuweisen?

Thema: Titelleiste - Icons komplett entfernen.
Am im Forum: GUI: Windows-Forms

Hi MS Master,

wenn du

this.MaximizeBox = false;
this.MinimizeBox = false;
machst ist nur noch das Schließen Icon da.Wie du aber die gesamte Titelleiste weg bekommst weiß ich leider auch nicht

Thema: Form überschreiben
Am im Forum: GUI: Windows-Forms

Ein komplett neue Oberfläche will ich erstellen ,deswegen ja auch die dll Datei

Thema: Form überschreiben
Am im Forum: GUI: Windows-Forms

Mit Menü waren Buttons gemeint wo halt der Modus drauf steht und nicht die Menübar.Aber das mit dem löschen war mir schon klar nur wie lade ich die neuen Komponenten in die Form?

Thema: Form überschreiben
Am im Forum: GUI: Windows-Forms

Je nachdem ob der User Singleplayer oder Multiplayer auswählt soll eine andere Klasse geladen werden.Die Klassen habe ich jeweils in eine dll Datei geschrieben (ein komplettes Fenster) .Nun will ich aber dass sich kein neues Fenster öffnet sondern dass das alte Fenster mit dem Menü überschrieben wird. Also das gleiche als würde eine neue InitializeComponent() geladen werden.
Ich will hat diesen Übergangseffekt vermeiden wo sich ein Fenster schließt und ein neues öffnet.

@herbivore
Hatte mich verklickt X(

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Je nachdem ob der User Singleplayer oder Multiplayer auswählt soll eine andere Klasse geladen werden.Die Klassen habe ich jeweils in eine dll Datei geschrieben (ein komplettes Fenster) .Nun will ich aber dass sich kein neues Fenster öffnet sondern dass das alte Fenster mit dem Menü überschrieben wird. Also das gleiche als würde eine neue InitializeComponent() geladen werden.
Ich will hat diesen Übergangseffekt vermeiden wo sich ein Fenster schließt und ein neues öffnet

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Ich danke dir

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Wenn ich auf Verbinden klicke kann ich im Fenster nix mehr anklicken.Die Sanduhr ist nur noch da

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Zitat
Original von Programmierhans
Im ersten Codeblock sendest Du ein leeres ByteArray ! GuckstDu Encoding.GetBytes an....

und im zweiten Codeblock läuft er nur einmal direkt durch (weil DataAvailable noch auf false ist).... da muss ne Schlaufe hin (und das ThreadSleep nicht vergessen)

Ich lass Dich nicht ganz hängen, aber alles will ich ja auch nicht für Dich coden... sonst lernst Du ja nichts....

Sollst du ja auch nicht

Also das erste habe ich jetzt geändert

	byte[] bytesToSend=Encoding.Default.GetBytes("test");
							ns.Write(bytesToSend,0,bytesToSend.Length);

Den zweiten Block auch

while(!this._ClientStop)
			{

				if(nsc.DataAvailable)
				{
					byte[] bytes=new byte[this._TcpClientSender.ReceiveBufferSize];
					int intBytesRead=nsc.Read(bytes,0,this._TcpClientSender.ReceiveBufferSize);
					String j=Encoding.Default.GetString(bytes,0,intBytesRead);
					
					//work=true;
				}
				else
				{
					Thread.Sleep(100);
				}
			}

Der Client stürzt nun aber beim Verbinden was aber sicher daran liegt das die Schleife erst "zu Ende" läuft

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Sieht ganz so aus als wäre das wieder total falsch

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Damit der Server an die Clients Daten sendet müsste ich den NetworkStream vom jeweiligen Client nehmen und damit dann die Daten senden.

foreach (TcpClient client in this._HtClients.Keys)
					{
						NetworkStream ns=this._HtClients[client]as NetworkStream;
						if (ns.DataAvailable)
						{
							//oho wir haben Daten erhalten
							byte[] bytes=new byte[client.ReceiveBufferSize];
							int intBytesRead=ns.Read(bytes,0,client.ReceiveBufferSize);
							String j=Encoding.Default.GetString(bytes,0,intBytesRead);
							ns.Write(bytes,0,client.ReceiveBufferSize); //Senden der Empfangen Daten an Client
							this.label9.Location=new Point(Spieler.spieler1x[int.Parse(j)],Spieler.spieler1y[int.Parse(j)]);	
							this.Refresh();
							iHadWork=true;
						}
					}

Wobei nach diesem Code jetzt nur an den Client gesendet wird welcher gerade Daten schickt aber zum testen reicht es ja erst einmal.

Damit der Client Daten empfängt müsste ich ein NetworkStream für den Client erstellen.
Ich habe das jetzt mal direkt beim Verbinden zum Server gemacht

this._TcpClientSender=new TcpClient();
			this._TcpClientSender.Connect(IPAddress.Parse("127.0.0.1"),6667);
			this._SendStream=this._TcpClientSender.GetStream();
			NetworkStream nsc=this._SendStream as NetworkStream;
			if(nsc.DataAvailable)
			{
				byte[] bytes=new byte[this._TcpClientSender.ReceiveBufferSize];
				int intBytesRead=nsc.Read(bytes,0,this._TcpClientSender.ReceiveBufferSize);
				String j=Encoding.Default.GetString(bytes,0,intBytesRead);
				MessageBox.Show(j);
			}
Ist das jetzt Ansatzweise richtig?

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Ich habe mal versucht das irgendwie zu machen.


//prüfe ob für offene Clients Daten da sind
					foreach (TcpClient client in this._HtClients.Keys)
					{
						NetworkStream ns=this._HtClients[client]as NetworkStream;
						if (ns.DataAvailable)
						{
							//oho wir haben Daten erhalten
							Stream outStream=client.GetStream();
							byte[] bytes=new byte[client.ReceiveBufferSize];
							int intBytesRead=ns.Read(bytes,0,client.ReceiveBufferSize);
							String j=Encoding.Default.GetString(bytes,0,intBytesRead);
							outStream.Write(bytes,0,intBytesRead); //Daten an Client senden?
							//MessageBox.Show(j);
							this.label9.Location=new Point(Spieler.spieler1x[int.Parse(j)],Spieler.spieler1y[int.Parse(j)]);	
							this.Refresh();
							iHadWork=true;
						}
					}

this._TcpClientSender=new TcpClient();
			this._TcpClientSender.Connect(IPAddress.Parse("127.0.0.1"),6667);
			this._SendStream=this._TcpClientSender.GetStream();
			_HtClients2.Add(this._TcpClientSender,this._TcpClientSender.GetStream());
			foreach (TcpClient client in _HtClients2.Keys)
			{MessageBox.Show("kdöl");
				NetworkStream ns=this._HtClients2[client]as NetworkStream;
				if (ns.DataAvailable)
				{
					
					//oho wir haben Daten erhalten
					Stream outStream=client.GetStream();
					byte[] bytes=new byte[client.ReceiveBufferSize];
					int intBytesRead=ns.Read(bytes,0,client.ReceiveBufferSize);
					String j=Encoding.Default.GetString(bytes,0,intBytesRead);
					outStream.Write(bytes,0,intBytesRead);
					//MessageBox.Show(j);
					this.label9.Location=new Point(Spieler.spieler1x[int.Parse(j)],Spieler.spieler1y[int.Parse(j)]);	
					this.Refresh();
					//iHadWork=true;
				}
			}

Ich hoffe ihr denkt jetzt nicht was macht der da für ein Quatsch aber ich verstehe nicht wie ich das umsetzten soll X(

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Und wie geht sowas??

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Erst einmal vielen vielen Dank für die Arbeit die du dir gemach hast
Habe aber noch eine Frage wie kann der Server an Client Daten senden??

Thema: Umstrukturierung des Forums
Am im Forum: Ankündigungen

Ich finde es auch besser als vorher
Nur habe ich jetzt mein Thema ins falsche Forum geschrieben

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Thread.Sleep und Thread.Join sind mir bekannt, ich weiß aber nicht wo ich das anwenden soll
Ich denke du meinst ich soll das Senden der Daten an Client schlafen legen wenn es nix zu gibt.Aber woher soll die Methode wissen wann die Spielfigur sich bewegt ??
Mit this.label9.LocationChanged+=new EventHandler(label9_LocationChanged); wird bei Location änderung eine Methode aufgerufen und müsste dann die Daten an den Client gesendet werden

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Ich finde das mit native TCP/IP einfacher und habe es mal damit Versucht.

1.Problem der Thread

public class ServerThread
	{
		// Stop-Flag
		public bool stop = false;
		// Flag für "Thread läuft"
		public bool running = false;
		// Die Verbindung zum Client
		private TcpClient connection = null;
		// Speichert die Verbindung zum Client und startet den Thread
		public ServerThread ( TcpClient connection )
		{
			// Speichert die Verbindung zu Client,
			// um sie später schließen zu können
			this.connection = connection;
			// Initialisiert und startet den Thread
			new Thread ( new ThreadStart ( Run ) ).Start ();
		}
		// Der eigentliche Thread
		public void Run ()
		{
			// Setze Flag für "Thread läuft"
			this.running = true;
			// Hole den Stream für's schreiben
			Stream outStream = this.connection.GetStream ();
			int buf = 0;
			bool loop = true;
			while ( loop )
			{
				try
				{
					// Hole die aktuelle Zeit als String
					int i = Form1.i;
					// Sende Zeit nur wenn sie sich von der vorherigen unterscheidet
					if ( i!=buf )
					{
						// Wandele den Zeitstring in ein Byte-Array um
						// Es wird noch ein Carriage-Return-Linefeed angefügt
						// so daß das Lesen auf Client-Seite einfacher wird
						Byte[] sendBytes = Encoding.ASCII.GetBytes ( i + "\r\n" );
						
						// Sende die Bytes zum Client
						outStream.Write ( sendBytes, 0, sendBytes.Length );
						// Merke die Zeit
						buf = i;
					}
					// Wiederhole die Schleife so lange bis von außen der Stopwunsch kommt
					loop = !this.stop;
				}
				catch ( Exception )
				{
					// oder bis ein Fehler aufgetreten ist
					loop = false;
				}
			}

		}
		public void close()
		{
			// Schließe die Verbindung zum Client
			this.connection.Close ();
			// Setze das Flag "Thread läuft" zurück
			this.running = false;
		}
	}
Ich bin nach der Anleitung auf http://www.microsoft.com/germany/msdn/library/net/csharp/NetworkingMitCSharp.mspx vorgegangen.
Hier wird die Schleife in der run() ja solange durchlaufen bis die Verbindung getrennt wird.Ich will aber dann Daten senden wenn sich die Spielfigur bewegt und somit die 100% Prozessor auslastung vermeiden.

2.Problem der Client
Der Client stürzt ab was aber auch an der 100% Prozessor auslastung liegen könnte.Den es müsste eigentlic alles stimmen:

private void client()
		{
			// Verbindung zum Server aufbauen
			c = new TcpClient ( "localhost", 4711 );
			// Stream zum lesen holen
			String buff=null;
			StreamReader inStream = new StreamReader ( c.GetStream () );
			if(inStream.ReadLine().ToString()!=buff)
			{
				try
				{
					MessageBox.Show(inStream.ReadLine().ToString());
					// Hole nächsten Zeitstring vom Server
					/*int j= int.Parse(inStream.ReadLine ());
					this.label9.Location=new Point(Spieler.spieler1x[j],Spieler.spieler1y[j]);	
					this.Refresh();*/
					buff=inStream.ReadLine().ToString();
				}
				catch ( Exception )
				{
					// Setze das Schleifen-Flag zurück
					// wenn ein Fehler in der Kommunikation aufgetreten ist
					this.clientclose();
				}
			}
		}

Eine Verbindung zum Server wird per Buttonklick hergestellt

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Ich verstehe nicht wie ich das bei mir einbauen kann X( Also was ich vor habe ist ein kleines Brettspiel welches je nach Auswahl alleine oder im Netzwerk gespielt werden kann.
Wenn Multiplayer ausgewählt wurde geht es auf das Spielfeld wo Spieler1 würfelt und die Spielfigur bewegt sich.Spieler2 soll den den gewürfelten Wert sehen zB in einer TextBox oder MessageBox und auch wie sich die Spielfigur bewegt.
Später kommen da noch andere Dinge hinzu die Spieler2 erfahren muss.
Klickt der Spieler auf Würfeln passiert folgendes:

private void button1_Click(object sender, System.EventArgs e)
		{
			int zuz=zz.Next(1,6);
			this.textBox1.Text=zuz.ToString();
			for(int j=1;j≤zuz;j++)
			{	
				if(i==8)
				{
					i=0;
				}
				this.label9.Location=new Point(Spieler.spieler1x[i],Spieler.spieler1y[i]);	// Die Punkte kommen aus einem Array
				i++;
				this.Refresh();
				Thread.Sleep(600);
				
			}
			
		}

Nun müsste beim Multiplayer ja die Location an den Client (Spieler2) gesendet werden.Dazu könnte man eine Methode schreiben welche die Location an alle verbunden IPs schicken bis auf die eigene IP.

Ist für sowas nicht doch native TCP/IP besser?

Thema: TCP/IP Daten senden/empfangen
Am im Forum: Netzwerktechnologien

Danke für die Antwort
Ich werde mir das mal anschauen und versuchen in mein Projekt zu übertragen.