VB.NET Sockets Communication

Status
Niet open voor verdere reacties.

ErikBooy007

Terugkerende gebruiker
Lid geworden
24 mei 2007
Berichten
3.814
Ik ben begonnen me een beetje te verdiepen in communicatie tussen PC's middels VB.NET (kwam weer terug op dit idee door een topic dat hier pas gepsot werd). Nu heb ik echter een probleempje. Ik wil geen gebruik maken van winsock of oswinsock (zoals in dat topic naar voren kwam).

Ik heb nu de volgende code:

[CPP]
Imports System.Net.Sockets
Imports System.Text

Public Class Form1

Dim serverSocket As New TcpListener(8888)
Dim requestCount As Integer
Dim clientSocket As TcpClient


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



End Sub

Public Sub output(ByVal text As String)

lbxLog.Items.Add(text)

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
serverSocket.Start()
output("Server Started")
clientSocket = serverSocket.AcceptTcpClient()
output("Accept connection from client")

requestCount = 0

While (True)

Try

requestCount = requestCount + 1

Dim networkStream As NetworkStream = clientSocket.GetStream()
Dim bytesFrom(1024) As Byte

networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))

Dim dataFromClient As String = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"))

output("Data from client: " & dataFromClient)

Dim serverResponse As String = "Server response: " & Convert.ToString(requestCount)

Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(serverResponse)

networkStream.Write(sendBytes, 0, sendBytes.Length)

networkStream.Flush()

output(serverResponse)

Catch ex As Exception

output(ex.ToString)

End Try

End While

clientSocket.Close()
serverSocket.Stop()
output("exit")
End Sub
End Class
[/CPP]

CPP hihlighting werkt ook wel aardig voor VB ;)

Nu is probleem, elke keer als ik de code aanroep voor het communicatie gedeelte loopt het programma vast. Ik krijg geen foutmelding of iets dergelijks.

Nu ga ik ervanuit dat het door de While ( True ) komt, maar ik weet niet wat ik daar anders aan moet doen.

Deze code komt van http://vb.net-informations.com/communications/vb.net_Server_Socket.htm en was daar eigenlijk een console-application, maar ik ging ervanuit dat ik die ook wel in een Windows Form Application kon gebruiken.

Kunnen jullie me vertellen, wat ik fout doe, en hoe ik het op kan lossen?

Alvast bedankt!

EDIT:

Ik zou het ook wel heel erg waarderen als jullie me kort kunnen uitleggen, hoe ik een verbinding tot stand breng, de server berichten laat sturen en de client er naar laat luisteren.
 
Laatst bewerkt:
Misschien in een background laten werken.
Als je dan de buffer vol hebt met een asynchroon event versturen naar je main program.

Door de while heb je idd geen controle meer over je scherm.
 
Aha, dan ga ik me eens in de BackGroundWorker verdiepen. Bedankt alvast en als het niet lukt hoor je het wel ;)

Overigens als er nog tips zijn, hoe je eenvoudiger kunt communiceren, die zijn nog steeds welkom.
 
Nu zit ik dus een beetje met die BackGroundWorker te stoeien en heb ik weer een probleem.

Ik probeer vanuit de BGW een listbox te updaten (Sub output in m'n code). Toen kreeg ik een error. Kwam blijkbaar doordat ik uit een andere thread werkte.

Na wat te hebben gezocht naar de oplossing kwam ik op dit:

[CPP]
If Me.lbxLog.InvokeRequired
Dim d As New SetTextCallback(AddressOf output)
Me.Invoke(d, New Object() {[NewText] + " (Invoke)"})
End If
[/CPP]

Het eerste probleem is, dat SetTextCallBack een error geeft. Verder weet ik niet precies wat ik met de regel daaronder moet.

Kan iemand me vertellen hoe ik vanuit de background worker de output sub kan aanroepen of anders items naar de listbox kan schrijven?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan