Hallo zusammen,
ich komm mal gleich zur Sache.
Ich habe einen Chat geschrieben (Server und Client) in VB.Net.
Servercode
Dim nachricht() As Byte
server = New Socket(AddressFamily.InterNetwork, SocketType.Stream, _
ProtocolType.IP)
ip = computerinfo.AddressList(cboip.SelectedIndex)
EP = New IPEndPoint(ip, CInt(txtport.Text))
server.Bind(EP)
Try
server.Listen(1)
client = server.Accept()
nachricht = System.Text.Encoding.ASCII.GetBytes("Server sagt" & _
"Hallo...")
client.Send(nachricht)
txtausgabe.Text = System.Text.Encoding.ASCII.GetString(nachricht)
txtausgabe.Text += vbCrLf
eingangsgroesse = client.Receive(eingang)
txtausgabe.Text += System.Text.Encoding.ASCII.GetString(eingang, 0, _
eingangsgroesse)
txtausgabe.Text += vbCrLf
Catch e As SocketException
txtausgabe.Text += vbCrLf
txtausgabe.Text += e.ToString
End Try Clientcode
server = New Socket(AddressFamily.InterNetwork, SocketType.Stream, _
ProtocolType.IP)
ip = computerinfo.AddressList(cboip.SelectedIndex)
EP = New IPEndPoint(ip, CInt(txtport.Text))
Try
Dim nachricht As String = "Hallo Server, hier der Client"
server.Connect(EP)
eingangsgroesse = server.Receive(eingang)
txtausgabe.Text += System.Text.Encoding.ASCII.GetString(eingang, 0, _
eingangsgroesse)
txtausgabe.Text += vbCrLf
server.Send(Encoding.ASCII.GetBytes(nachricht))
txtausgabe.Text += nachricht
txtausgabe.Text += vbCrLf
Catch e As SocketException
txtausgabe.Text += vbCrLf
txtausgabe.Text += e.ToString
End Try Also bis hier klappt alles. Der Server sendet eine Nachricht und der Client empfängt sie.
Dann einmal andersrum und Ende.
1. Problem:
Nun weiß ich aus meinem Buch daß das Socket alles blockiert (tut es auch ganz gut).
Jedenfalls sollte man Empfang und Senden in verschieden Threads packen, damit das eigentliche Programm weiter benutzt werden kann (klicken von Schaltflächen).
Habe ich auch irgendwie geschafft aber dann kommt das...
2. Problem:
ich kann aus dem ersten Thread nicht auf Steuerelemente zugreifen die im ersten Thread laufen.
Wohin schreibe ich dann die Nachrichten????
Das ist die Prozedur die im Thread ausgeführt wird.
Aber hier kann ich nicht auf das Steuerelement txtausgabe zugreifen...
Sub empfange_daten()
do while true
if server.connected = true then
eingangsgroesse = server.Receive(eingang)
txtausgabe.Text += System.Text.Encoding.ASCII.GetString(eingang, 0, _
eingangsgroesse)
txtausgabe.Text += vbCrLf
end if
end while
End Sub Ich habe wirklich nicht viel Code erstellt... kann mir bitte jemand sagen wie ich das ordentlich realisieren kann ohne die Codemenge zu verdreifachen?
Mit Threads und dem Befehl Invoke kenn ich mich sehr schlecht aus..
Ich möchte mich wenn möglich auch nicht durch 200 Zeilen fremden Code lesen, der event. auch noch in Klassen unterteilt ist...
Bin am verzweifeln..
Gruß, Nicky |