| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: [VB.NET] Winsocks verwenden im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo Habo Community, ich suche seit gestern abend verzweifelt nach einem Tutorial wie man Winsocks in VB .Net verwendet. ...
![]() |
| | #1 (permalink) |
| Anzeige Hallo Habo Community, ich suche seit gestern abend verzweifelt nach einem Tutorial wie man Winsocks in VB.Net verwendet. Leider Fand ich bei Google und hier immer nur sachen für vb 5 und 6. Kann mir vllt. irgendeiner von euch ein Tutorial schicken bzw. mir kurz erklären wie ich Connect und Listen verwende? mfg Henni | |
| | |
| | #2 (permalink) |
| Hast du das .NET Framework 2.0 SDK installiert? Wenn ja, schau dir mal die Documentation(MSDN) an, dort steht alles, mit Beispielcode, drin. Ansonsten die Online MSDN: System.Net.Sockets.Socket Ich würde aber eher den TcpClient bzw TcpListener empfehlen: System.Net.Sockets.TcpClient System.Net.Sockets.TcpListener MfG | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 30.03.07 ![]() Likes: 17 | Moin Henny, melde Dich mal hier an und surf... http://entwickler-forum.de/forumdisplay.php?f=14 dort solltest du fündig werden, oder im form vom vb archive... wenn dir dat nix hilft meld dich nochmal, gib dir dann ein tutorial... Gruß Andy |
| | |
| | #4 (permalink) |
| Themenstarter | Ich habe es nun verstanden wie man sich Verbindet... Es hakt aber noch an einigen stellen... Habe mir mal die Posts zu "Socket(s)" Angeschaut also im Entwickler Forum und nochn bissel auf Msdn gesurft. Ich habe bis jetzt folgendes: Server: Code: Public server As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ServerIP As Net.IPAddress = Net.IPAddress.Any
Dim LocalEndPoint As New Net.IPEndPoint(ServerIP, 26000)
server.Bind(LocalEndPoint)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStarten.Click
server.Listen(2)
lblStatus.Text = "Server gestartet"
server.Accept()
End Sub Client: Code: Private Sub btnVerbinden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerbinden.Click
If txtIP.Text = "" Then
MsgBox("Bitte eine IP eingeben")
Exit Sub
End If
If txtPort.Text = "" Then
MsgBox("Bitte einen Port eingeben")
Exit Sub
End If
Try
wsckChat.Connect(txtIP.Text, txtPort.Text)
MsgBox("Connected")
Catch ex As Exception
MsgBox("Fehlermeldung")
End Try
End Sub Henni ps.: Thx schonmal an euch beiden für eure Posts. |
| | |
| | #5 (permalink) |
| Registriert seit: 30.03.07 ![]() Likes: 17 | moin moin, da Du immer von fertigen Source Code sprichst, kann ich Dir noch einen nachschieben welcher eigentlich, wenn ich das auf die schnelle richtig gesehen habe alles beinhalten sollte. (dritter Link) Source code für chat Programm Ansonsten kann ich auch die MSN von Billy empfehlen. P.S. dort steht auch alles wat du includen musst. usw... Frohes Schaffen noch ByteSurfer |
| | |
| | #6 (permalink) |
| Themenstarter | Okay.... Ich bin einfach zu Dumm... Oder mein System ist voll kacke... Naja auf jeden fall habe ich mir mal das Projekt Hier runtergeladen. Versuche es nun in mein Visual Studio 2005 Prof. Einzubauen und erstens kommt mal die Fehlermeldung dass ich irgendwie die MSWinsockLib und die AxMSWinsock nicht habe. Dann wollt ich mir die Forms anschauen und die kann ich auch net anzeigen lassen. Bitte woher bekomme ich diese Librarys? habe bei google schon gesucht aber auch nur fragen gefunden wo man des herbekommt |
| | |
| | #7 (permalink) |
| Registriert seit: 30.03.07 ![]() Likes: 17 | moin Henni, was ist denn los bei Dir? ![]() Ich habe Visual Studio bei mir momentan nicht drauf. Wenn ich jetzt MIst erzähle bitte ich das zu entschuldigen, da ich VisualStudio nicht genau vor Augen habe... ALSO... Du kannst jedem Projekt Verweise hinzufügen. Wenn ich jetzt alles richtig in Erinnerung habe: Projekte->Verweis hinzufüguen->COM oder NET->Microsoft Winsock Control oder so ähnlich.......->dann wähle es aus und drücke o.k. oder einfach mal durchklicken und suchen irgendwo da... Wenn ich falsch liegen sollte bitte ich andere zu ergänzen, oder zu helfen... Ansonsten kann ich auch nur nochmal den Link Socket MSDN ans Herz legen.. einfach mal surfen, oder VisualStudio Foren nutzen Sry Gruß ByteSurfer |
| | |
| | #8 (permalink) |
| Themenstarter | Das was du da schreibst ist meines wissens nach eigentlich richtig. So habe ich das schon in anderen Foren auch gelesen. Allerdings: Ich habe diesen Punkt nicht^^ Ich kann das nicht hinzufügen... Der Punkt existiert einfach net...^^ Ist das denn .Net Standart oder überhaupt Standart?^^ Oder Fehlt mir wirklich einfach nur so eine blöde Library? mfg Henni |
| | |
| | #9 (permalink) | |
| Zitat:
dh. nach dem aufruf von Accept() wird solange gewartet/blockiert bis sich ein Client connected und erst dann wird der zugrundeliegnde Socket zurückgegeben. Code: Dim client As System.Net.Sockets.Socket = server.Accept() könnte man den Accept vorgang in einen Thread auslagern, allerdings währe dann eine "saubere" beendung des Threads nicht mehr möglich, da der Thread ja nun blockiert. Genau aus diesem Grund sollte man den TcpListener bevorzugen. Dieser bietet eine Mothode namens Pading() an, welche prüft ob eingehende Verbindungen anstehen. Beispiel Es ist zwar C# code aber die Klassen und Methoden sind ja die selben (.NET). ListenAsThread() und AcceptSocketCallback() könnten dir vielleicht weiter helfen. Und hier noch ein Beispiele aus der MSDN: TcpListener Wollen wir das ganze mal auf dein Beispiel anwenden. server client Könnten ein paar Syntax fehler drin sein, code normal kein vb.net Kompiliert hab ich es auch noch nicht .... alles ohne Gewehr ![]() MfG | ||
| | |
| | #10 (permalink) |
| Themenstarter | Habe den Code mal angepasst und eingebaut, funktioniert auch alles Super, danke erstmal. Ein Problem besteht aber noch ich kann den server net Neustarten (Stoppen und wieder Starten, da der Thread den ich gemacht habe nicht neugestartet werden kann, vllt weiß da einer ne lösung) und ich kann genau eine Message abschicken dann disconnecten die wieder, ist das richtig so? Und von meinem Client kann ich einmal connecten und was machen, aber wenn ich versuch neu zu connecten dann Funzt das wieder net.... Hier der Komplette Code (auch unwesentliche teile dabei): Server: Code: Public Class Form1
Public server As New System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 26000)
Dim client As System.Net.Sockets.TcpClient
Dim netStream As System.Net.Sockets.NetworkStream
Dim ThMessageEmpfDelegate As New Threading.ThreadStart(AddressOf MessageThread)
Dim ThMessageEmpf As New Threading.Thread(ThMessageEmpfDelegate)
Dim MessageIncomed As Boolean = False
Public StrTest As String
Private Sub btnStarten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStarten.Click
server.Start()
lblStatus.Text = "Server gestartet"
ThMessageEmpf.Start()
btnStarten.Enabled = False
btnStop.Enabled = True
End Sub
Public Sub MessageThread()
Dim readBuffer(1024) As Byte
Dim message As System.Text.StringBuilder = New System.Text.StringBuilder()
Dim bytesReaded As Integer
While (True)
StrTest = server.Pending.ToString
If server.Pending Then
bytesReaded = 0
client = server.AcceptTcpClient()
netStream = client.GetStream()
' Incoming message may be larger than the buffer size.
Do
bytesReaded = netStream.Read(readBuffer, 0, readBuffer.Length)
message.AppendFormat("{0}", System.Text.Encoding.ASCII.GetString(readBuffer, 0, bytesReaded))
Loop While netStream.DataAvailable
' Print out the received message to the console.
'lblTest.Text = "Nachricht vom Client : " + message.ToString
MsgBox(message.ToString)
MessageIncomed = True
Else
System.Threading.Thread.Sleep(10)
End If
End While
End Sub
Private Sub BeendenToolStripMenuItem_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click
Me.Close()
End Sub
Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
If MessageIncomed Then
netStream.Close()
End If
server.Stop()
ThMessageEmpf.Abort()
lblStatus.Text = "Server gestoppt"
End Sub
Private Sub btnStrTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStrTest.Click
MsgBox(StrTest)
End Sub
End Class Code: Public Class Form1
Public tcpClient As New TcpClient
Public netStream As NetworkStream
Private Sub btnVerbinden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerbinden.Click
If txtIP.Text = "" Then
MsgBox("Bitte eine IP eingeben")
Exit Sub
End If
If txtPort.Text = "" Then
MsgBox("Bitte einen Port eingeben")
Exit Sub
End If
Try
'Uses the IP address and port number to establish a socket connection.
Dim ipAddress As Net.IPAddress = System.Net.Dns.GetHostEntry(txtIP.Text).AddressList(0)
tcpClient.Connect(ipAddress, Convert.ToInt32(txtPort.Text))
lblStatus.Text = "Mit Server " + txtIP.Text + " auf dem Port " + txtPort.Text + " verbunden."
btnSenden.Enabled = True
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub btnSenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSenden.Click
Try
netStream = tcpClient.GetStream()
Dim writeBuffer As Byte() = System.Text.Encoding.ASCII.GetBytes(txtMessage.Text)
netStream.Write(writeBuffer, 0, writeBuffer.Length)
Catch ex As Exception
MsgBox("Fehlermeldung")
End Try
End Sub
Private Sub btnTrennen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTrennen.Click
netStream.Close()
tcpClient.Close()
lblStatus.Text = "Vom Server getrennt"
btnSenden.Enabled = False
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
lblStatus.Text = "Vom Server getrennt"
btnSenden.Enabled = False
End Sub
End Class mfg Henni achso und ich kann von dem anderen Thread nicht die eingabefelder und die Labels bearbeiten... Gibts da ne möglichkeit? |
| | |
| | #11 (permalink) | |
| Zitat:
Bei GUI Elementen wie zb. dem Label ist es recht einfach: Code: Public Sub MessageThread()
Invoke(DirectCast(AddressOf ConvertedAnonymousMethod1, MethodInvoker))
EndS Sub
Private Sub ConvertedAnonymousMethod1()
Label1.Text = " blub"
End Sub Den source vom Server/Client schau ich mir nachher an, hab ich gerade keien zeit für MfG | ||
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Winsocks funktioniert nur lokal | Virus | Code Kitchen | 7 | 21.04.09 11:18 |
| winsocks hostname auflösen linkererror | <b00n> | Code Kitchen | 6 | 04.08.07 21:17 |
| Winsocks [c++] ports öffnen | <b00n> | Code Kitchen | 5 | 01.08.07 10:56 |
| problem mit winsocks | <b00n> | Code Kitchen | 2 | 02.07.07 15:33 |
| C++: unrar.dll verwenden | mido | Code Kitchen | 3 | 26.11.05 21:58 |