Mi hanno suggerito di utilizzare i canali specificando il canale.. dove diregere il tipo di flusso...
ma non riesco a dividere i 2 flussi vi posto il codice aggiornato NON funzionante i 2 flussi sono uniti...
SERVER
codice:
Imports System.Net.Sockets
Imports System.Text.UTF8Encoding
Public Class frmMain
Public Const ChatM As String = "775|"
Public Const CamM As String = "776|"
Dim Listener As TcpListener
Dim Client As TcpClient
Dim Stream As NetworkStream
Private Sub Server_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Nickname.Text = "kerberos5"
Chat.Text = "Conversazione" & vbCrLf
Chat.ReadOnly = True
Listener = New TcpListener(8080)
Listener.Start()
Timer1.Start()
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
If Client.Available > 0 Then
Dim x(Client.Available - 1) As Byte
Stream.Read(x, 0, x.Length)
Dim text As String = UTF8.GetString(x)
Chat.Text = Chat.Text & text & vbCrLf
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Listener.Pending = True Then
Timer1.Stop()
Client = Listener.AcceptTcpClient()
Listener.Stop()
Stream = Client.GetStream()
Timer2.Start()
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim y() As Byte = UTF8.GetBytes(Nickname.Text & ": " & Messaggio.Text)
Stream.Write(y, 0, y.Length)
Chat.Text = Chat.Text & Nickname.Text & ": " & Messaggio.Text & vbCrLf
Messaggio.Text = Nothing
Catch ex As NullReferenceException
MsgBox("Non si è ancora connesso nessuno, aspetta e riprova!")
Catch ex2 As System.IO.IOException
MsgBox("Il destinatario del messaggio si è scollegato o ha conflitti di IP!")
End Try
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Chat.Text = "Conversazione" & vbCrLf
End Sub
Public Shared Function ByteToBmp(ByVal _imgByteArray As Byte()) As System.Drawing.Bitmap
Dim _ms As New Global.System.IO.MemoryStream(_imgByteArray, 0, _imgByteArray.Length)
_ms.Write(_imgByteArray, 0, _imgByteArray.Length)
Dim _bmp As New System.Drawing.Bitmap(_ms)
_ms.Flush()
_ms.Dispose()
Return _bmp
End Function
Public Shared Function Foo(ByVal eChannel As String, ByVal iMessage As String) 'Pass the channel and message to the subroutine
Dim eMessage As String
eMessage = eChannel & iMessage
End Function
Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
If Client.Available > 0 Then
Dim ss(Client.Available - 1) As Byte
Stream.Read(ss, 0, ss.Length)
If UTF8.GetString(ss) = "776|" Then 'provo a fargli leggere il canale...??
pView.Image = ByteToBmp(ss)
End If
End If
End Sub
End Class
CLIENT:
codice:
Imports System.Net.Sockets
Imports System.Text.UTF8Encoding
Imports System.IO
Imports System.Runtime.InteropServices
Public Class frmMain
Public Const ChatM As String = "775|"
Public Const CamM As String = "776|"
'Webcam
Public Touchless As New TouchlessLib.TouchlessMgr
Public Camera1 As TouchlessLib.Camera = Touchless.Cameras.ElementAt(0)
Dim IP As System.Net.IPHostEntry = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName)
Dim client As TcpClient
Dim Stream As NetworkStream
Private Sub Client_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If System.IO.File.Exists(Application.StartupPath & "\" & "WebCamLib.dll") = False Then
Dim B() As Byte
Dim RM As Resources.ResourceManager
RM = New Resources.ResourceManager("vbClient.Resources", System.Reflection.Assembly.GetExecutingAssembly)
B = RM.GetObject("WebCamLib")
System.IO.File.WriteAllBytes(Application.StartupPath & "\" & "WebCamLib.dll", B)
End If
Nickname.Text = My.User.Name
TextBox2.Text = "Conversazione" & vbCrLf
TextBox2.ReadOnly = True
Try
Touchless.CurrentCamera = Camera1
Touchless.CurrentCamera.CaptureHeight = 240
Touchless.CurrentCamera.CaptureWidth = 320
Timer2.Start()
Call connect()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Public Sub connect()
Dim Address As Net.IPAddress
Net.IPAddress.TryParse(Me.txtip.Text, Address)
client = New TcpClient
client.Connect(Address, Me.txtport.Text)
If client.Connected Then
Stream = client.GetStream
Me.Timer1.Start()
Me.TextBox2.Text = Me.TextBox2.Text & "Connessione effettuata." & vbCrLf
Stream.Write(UTF8.GetBytes("Si è connesso " & Me.Nickname.Text & "!"), 0, UTF8.GetBytes("Si è connesso " & Me.Nickname.Text & "!").Length)
Else
Me.TextBox2.Text = Me.TextBox2.Text & "Impossibile connettersi..." & vbCrLf
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If client.Available > 0 Then
Dim x(client.Available - 1) As Byte
Stream.Read(x, 0, x.Length)
Dim text As String = UTF8.GetString(x)
TextBox2.Text = TextBox2.Text & text & vbCrLf
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
TextBox2.Text = "Conversazione" & vbCrLf
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
'invio il messaggio di chat specificando il canale convertito in byte
'Dim y() As Byte = UTF8.GetBytes(Foo(ChatM, Nickname.Text & ": " & TextBox1.Text))
Dim y() As Byte = UTF8.GetBytes(Nickname.Text & ": " & TextBox1.Text)
Stream.Write(y, 0, y.Length)
TextBox2.Text = TextBox2.Text & Nickname.Text & ": " & TextBox1.Text & vbCrLf
TextBox1.Text = Nothing
Catch ex As NullReferenceException
MsgBox("Non sei collegato con nessuno!")
Catch ex As System.IO.IOException
MsgBox("Il destinatario si è scollegato o ha conflitti di IP!")
End Try
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
pView.Image = Touchless.CurrentCamera.GetCurrentImage
Dim ss() As Byte = BmpToByte(pView.Image) 'converto frame bmp in byte
Dim ChaCam() As Byte = UTF8.GetBytes(CamM) 'carico l'identificativo del canale nella varibile
Stream.Write(ChaCam, 0, ChaCam.Length) 'invio ???
Stream.Write(ss, 1, ss.Length) 'invio flusso dati della cam
End Sub
'funzione converti from BMP To Byte
Public Shared Function BmpToByte(ByVal _bitmap As System.Drawing.Bitmap) As Byte()
Dim _ms As New Global.System.IO.MemoryStream()
_bitmap.Save(_ms, System.Drawing.Imaging.ImageFormat.Bmp)
Dim _bmpArray As Byte()
_bmpArray = _ms.ToArray()
_ms.Flush()
_ms.Dispose()
Return _bmpArray
End Function
'Pass the channel and message to the subroutine
Public Shared Function Foo(ByVal eChannel As String, ByVal iMessage As String)
Dim eMessage As String
eMessage = eChannel & iMessage
End Function
End Class
qualcuno mi può dare una mano... grazie in anticipo...