| 

.NET C# Java Javascript Exception

2
Ich würde gerne in unserer Inhouse-Anwendung eine Notizzettel-Funktion einbauen. Diese sollte in der Lage sein (ähnlich einem Post-it) eine Nachricht an einen anderen Mitarbeiter zu senden.

Habe schon mal geschaut, aber leider finde ich grad nicht die richtigen Begriffe dafür. Weil chatten möchte ich ja nicht (dafür hab ich ein paar Beispiele gefunden) - aber ist es die selbe "Technik" (UDP Sockets), die ich da verwenden muss?

Würde das gerne in VB.NET implementieren
News:
10.10.2012
MyKey0815 1,6k 2 9
1
Vor einiger Zeit stand ich vor der gleichen Frage. Fertigen Code hatte ich auch nicht gefunden. Wenn es bei Dir nicht ganz so brandeilig ist, könnte ich Dir die Teile zusammen suchen, wie ich es letztlich implementiert habe. Kann aber ein paar Tage dauern.
muffi 10.10.2012
@muffi
Das wäre dann schon mal ein Ansatz. Danke im vorraus.
Verwendest du einen zentralen Server oder ist jeder Client auch gleichzeitig Server? Das wäre die Lösung, die mir so vorschwebt
MyKey0815 10.10.2012
1
Bei mir ist jeder Client gleichzeitig Server. Das ermöglicht einen direkten Versand einer Nachricht via TCP/IP.
muffi 10.10.2012
3 Antworten
1
Es geht bei "meiner" Lösung doch schneller als gedacht. Zunächst einmal der Teil des Empfangsmodules - im folgenden Link funktioniert das mit Mitteilungen bis zu 1024 Zeichen. Ich starte dazu im mainform_load einen eigenen Thread und lasse den einfach marschieren. Beim Schließen von main ist es natürlich zweckmäßig, diesen Thread auch zu beenden ;-)

http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener%28v=vs.71%29.aspx

Was ich bei mir geändert habe (und damit habe ich genau diese PostIt-Funktionalität): das Console.WriteLine habe ich rausgeschmissen und erzeuge eine Instanz eines einfachen Formluars mit einer Multiline-Textbox, das mit TopMost über allen Fenstern residiert.

Zum Versenden nutze ich dann folgende Sub (Achtung, dort habe ich den Port auf 13000 eingestellt! Es muss selbstverständlich immmer der gleiche Port wie in der Empfangsklasse sein!):

Private Sub Connect(ByVal server As [String], ByVal message As [String]) 'schickt was
Try
' Create a TcpClient.
' Note, for this client to work you need to have a TcpServer
' connected to the same address as specified by the server, port
' combination.
Dim client As New TcpClient(server, 13000) ' Hier ist evtl. eine andere Portnummer einzustellen

' Translate the passed message into ASCII and store it as a Byte array.
Dim data As [Byte]() = System.Text.Encoding.Default.GetBytes(message)

' Get a client stream for reading and writing.
' Stream stream = client.GetStream();
Dim stream As NetworkStream = client.GetStream()

' Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length)

'Debug.Print("Sent: {0}", message)

' Receive the TcpServer.response.
' Buffer to store the response bytes.
data = New [Byte](1024) {}

' String to store the response ASCII representation.
Dim responseData As [String] = [String].Empty

' Read the first batch of the TcpServer response bytes.
Dim bytes As Int32 = stream.Read(data, 0, data.Length)
responseData = System.Text.Encoding.Default.GetString(data, 0, bytes)
'Debug.Print("Received: {0}", responseData)

' Close everything.
stream.Close()
client.Close()
Catch e As ArgumentNullException
'Console.WriteLine("ArgumentNullException: {0}", e)
Catch e As SocketException
'Console.WriteLine("SocketException: {0}", e)
End Try

'Console.WriteLine(ControlChars.Cr + " Press Enter to continue...")
'Console.Read()
End Sub 'Connect


Ich hoffe, Dir hilft das.
10.10.2012
muffi 1,4k 1 9
1
WCF wäre eine gute Lösung für dein Problem.

Hierbei hast du mehre Möglichkeiten die Kommunikation zu organisieren:

* Zentraler Server
* jeder Client implementiert sowohl den Client als auch den Server-Code
* P2P die Clients kommunizieren direkt über WCF-Remote-Callbacks

Ich hab die Mglichkeiten nach der Schwirigkeit der Umsetzung sortiert.

In Variante eins gibt es einen zentralen Server bei dem alle Clients angemeldet sind, welcher die Nachricht von Client zu Client durchreicht.

In Variante zwei gibt es keinen solchen zentralen Server so das die Clients direkt mit einander Kontakt aufbauen. Dazu spielt der Sender Client der den Serviceendpoint des Ziels (welcher folglich also Server spielt) aufruft und diesem eine Nachricht zustellt. Danach wird die Verbindung wieder abgebaut.

In Variante drei wird eine Bidirektionale Kommunikation zwischen den einzelnen Clients aufgebaut wobei es keine feste Unterscheidung zwischen Client und Server gibt. Daten werden in beide Richtungen über die selbe Verbindung übermittelt und kommunizieren z.B. über Remote-Callbacks.

Darunterliegend wird in jedem Fall UDP oder TCP Sockets verwendet, egal welche WCF-Art oder Variante du verwendest.
10.10.2012
Floyd 14,6k 3 9
Floyd 14,6k 3 9
1
Muss man das selbst programmieren? Klingt aufwändig. Such mal nach "Notification".
Auf die Schnelle habe ich "SNARL" gefunden, in diesem Thread werden noch andere Alternativen genannt. Ist es das was du suchst?
10.10.2012
puls200 3,8k 7

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH