Ciao a tutti, ultimamente sto realizzando un programmino, una piccola chat con un server e con un client, e funziona. Solo che la volevo trasformare solo un po' più chat, quindi vorrei chiedere a voi cosa ne pensate e che cosa potrei mettere per far sì che quello che ho in mente venga espresso in codice xD
Allora.. prima di tutto volevo fare che più utenti possono collegarsi alla chat e non solo uno per volta, in modo che la chat divenga più utile nel caso si vogliono esprimere opinioni con più persone, la seconda modifica era quella di far si che ogni utente può entrare in chat con un proprio nome, anche se deve inserirlo ogni volta non importa, poi per ultimo far si che tutti gli utenti possano vedere le cose che scrivono gli altri ma anche che leggano le proprie, perché in quello che ho fatto io il messaggio inserito dall'Utente1 viene visualizzato solo dall'Utente2 e non dall'Utente1 e questo può causare difficoltà, perchè magari ho scritto una cosa sbagliata ma non me ne accorgo nemmeno.
Detto ciò vi posto l'immagine del programmino Server e quello client, con i relativi codici:
Server Code:
codice:
Imports System.Net.Sockets Imports System.Text.UTF8Encoding Public Class Form1 Dim ascoltatore As TcpListener Dim cliente As TcpClient Dim flusso As NetworkStream Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ascoltatore = New TcpListener(8888) ascoltatore.Start() Timer2.Start() TextBox2.Text = TextBox2.Text & "Sono in attesa di qualcuno..." & vbCrLf End Sub Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick If ascoltatore.Pending() Then Timer2.Stop() cliente = ascoltatore.AcceptTcpClient() ascoltatore.Stop() flusso = cliente.GetStream() Timer1.Start() TextBox2.Text = TextBox2.Text & "Si è connesso un utente in data " & Now() & vbCrLf End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If cliente.Available > 0 Then Dim temporaneo(cliente.Available - 1) As Byte flusso.Read(temporaneo, 0, temporaneo.Length) Dim testo As String = UTF8.GetString(temporaneo) TextBox2.Text = TextBox2.Text & testo & vbCrLf End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim temporaneo() As Byte = UTF8.GetBytes(TextBox1.Text) flusso.Write(temporaneo, 0, temporaneo.Length) TextBox1.Text = "" TextBox1.Focus() End Sub End Class
Client Code:
codice:
Imports System.Net.Sockets Imports System.Text.UTF8Encoding Public Class Form1 Dim cliente As TcpClient Dim flusso As NetworkStream Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim indirizzo As Net.IPAddress Net.IPAddress.TryParse(TextBox3.Text, indirizzo) cliente = New TcpClient cliente.Connect(indirizzo, 8888) If cliente.Connected Then TextBox2.Text = TextBox2.Text & "Connessione Accettata, ora si puo chattare" & vbCrLf flusso = cliente.GetStream() Timer1.Start() Else TextBox2.Text = TextBox2.Text & "Connessione Fallita" & vbCrLf End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If cliente.Available > 0 Then Dim temporaneo(cliente.Available - 1) As Byte flusso.Read(temporaneo, 0, temporaneo.Length) Dim testo As String = UTF8.GetString(temporaneo) TextBox2.Text = TextBox2.Text & testo & vbCrLf End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim temporaneo() As Byte = UTF8.GetBytes(TextBox1.Text) flusso.Write(temporaneo, 0, temporaneo.Length) TextBox1.Text = "" TextBox1.Focus() End Sub Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked System.Diagnostics.Process.Start("http://www.whatismyip.com/") End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub End Class
A presto