Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

System.Net.Socket + Plusieurs Connexion

3 réponses
Avatar
Sim
Bonjour a tous ,

Je suis entrain de devellopez un petit programme qui contient un "chat" le
probleme c'est que je ne suis pas capable de connecter plus d'un client au
serveur l'orsque le second client essaie de ce connecter et bien le server
le reffuse :(

quelqu'un aurait une iddée pk le serveur accept seulement 1 connexion a la
fois.

Merci de votre aide

3 réponses

Avatar
ano
c'est asser simple sur le principe ...
j'ai fait un prog du meme style il y a queques temps avec un serveur ,
j'ai fais des teste avec 15 personne simultanée ca marche impecable...

donc sur le principe tu cree une classe client sur ton seveur

Private tacheclient As New Thread(AddressOf ecoute)

Public Sub ecoute()
Dim port As Integer = 80
serveur = New TcpListener(IPAddress.Parse("127.0.0.1"), port)
serveur.Start()
Try
While True
Dim cl As New conserv(serveur.AcceptTcpClient)
AddHandler cl.deconnection, AddressOf ondeconnection
AddHandler cl.reception, AddressOf onreception
'ect... tu place ce que tu veux 'bien sur declarer dans ta classe
avant...
End While


ta classe conserv 'connection serveur
Private _tcpclient As TcpClient
Public ReadOnly Property tcpclient() As TcpClient
Get
Return _tcpclient
End Get
End Property

Public Sub New(ByVal client As TcpClient)
_tcpclient = client
tcpclient.GetStream.BeginRead(buffer, 0, 1024, AddressOf
lecture, Nothing)
End Sub

voila a definir dans ta classe la gestion de reception et d'envoie des
message ... (examlpe pour la lecture...)

sinon attention dans ton prog toutes les variable recu de ton thread
doit etre passer avec un delegate pour les utiliser dans par exemple
ta form du style textbox1.text

ps je viens de taper le code comme ca peut etre il y des erreur a
verifier...
Avatar
Gilles TOURREAU [MVP]
"Sim" a écrit dans le message de
news:%
Bonjour a tous ,

Je suis entrain de devellopez un petit programme qui contient un "chat" le
probleme c'est que je ne suis pas capable de connecter plus d'un client au
serveur l'orsque le second client essaie de ce connecter et bien le server
le reffuse :(



Pouvez-vous êtres plus explicite ?


quelqu'un aurait une iddée pk le serveur accept seulement 1 connexion a la
fois.

Merci de votre aide




Créez-vous des thread dans le serveur à chaque fois qu'un client se connecte
?

Cordialement

--
Gilles TOURREAU - MVP C#
E-Mail :
Site Web : http://gilles.tourreau.fr

P.O.S - Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Sim
Voici une partie du code en esperant ne pas trop te mêler :(

****** TIMER *******
Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles tmrWait.Tick

If TcpServer.Pending = True Then

tmrWait.Enabled = False

Socket = TcpServer.AcceptSocket()

TcpServer.Stop()

If Socket.Connected = True Then

If Socket.Available > 0 Then

strTemp = ""

bytes = Socket.Receive(Buffer, Buffer.Length, 0)

strTemp = strTemp + ascii.ASCII.GetString(Buffer, 0, bytes)

Retour = MessageBox.Show("Souhaitez vous accepter la connexion en provenance
de : " & IPAddress.Parse((CType(Socket.RemoteEndPoint,
IPEndPoint).Address.ToString())).ToString & " (" & strTemp & ")" & " ?",
"Connexion", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

strTemp = ""

If Retour = DialogResult.No Then

Request = ":connection:REFUSED"

Dim ascii As Encoding = Encoding.ASCII

Dim bytesSent As [Byte]() = ascii.GetBytes(Request)

Try

Socket.Send(bytesSent, bytesSent.Length, 0)

Socket.Close()

Socket = Nothing

Catch

Socket = Nothing

End Try

TcpServer.Start()

tmrWait.Enabled = True

Socket = Nothing

Else

Request = ":connection:ACCEPTED"

Dim ascii As Encoding = Encoding.ASCII

Dim bytesSent As [Byte]() = ascii.GetBytes(Request)

Try

Socket.Send(bytesSent, bytesSent.Length, 0)

Catch

End Try

tmrConnect.Enabled = True

sbpConnection.Text = "Connecté !"

sbpConnection.Icon = New System.Drawing.Icon("TRFFC10A.ICO")

End If

End If

Else

TcpServer.Start()

tmrWait.Enabled = True

End If

End If

End Sub

****** TIMER *******

******* BOUTTON DE CONNECTION ********

Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)

If RejoindreUnePartieToolStripMenuItem.Text = "Se connecter" Then

If Connexion() = True Then

tmrConnect.Enabled = True

RejoindreUnePartieToolStripMenuItem.Text = "Se déconnecter"

gpbServer.Enabled = False

sbpConnection.Text = "En attente de l'acceptation de la connexion..."

sbpConnection.Icon = New System.Drawing.Icon("TRFFC10B.ICO")

Else

Exit Sub

End If

Else

RejoindreUnePartieToolStripMenuItem.Text = "Se connecter"

gpbServer.Enabled = True

tmrConnect.Enabled = False

sbpConnection.Text = "Non connecté"

sbpConnection.Icon = New System.Drawing.Icon("TRFFC10C.ICO")

If Socket Is Nothing Then

Exit Sub

Else

If Socket.Connected = True Then

Request = ":connection:CLOSING"

Dim ascii As Encoding = Encoding.ASCII

Dim bytesSent As [Byte]() = ascii.GetBytes(Request)

Try

Socket.Send(bytesSent, bytesSent.Length, 0)

Socket.Close()

Catch

End Try

Socket = Nothing

End If

End If

End If

End Sub

******* BOUTTON DE CONNECTION ********

Private Shared Function ConnectSocket(ByVal server As String, ByVal port As
Integer) As Socket

Dim Socket As Socket = Nothing

Dim hostEntry As IPHostEntry = Nothing

Try

hostEntry = Dns.Resolve(server)

Catch ex As Exception

If InStr(ex.ToString, "No such host") >= 1 Then

MessageBox.Show("Adresse IP non valide ou hôte non connecté.", "Connexion",
MessageBoxButtons.OK, MessageBoxIcon.Error)

Exit Function

End If

MessageBox.Show(ex.ToString)

End Try

Dim address As IPAddress

For Each address In hostEntry.AddressList

Dim endPoint As New IPEndPoint(address, port)

Dim tempSocket As New Socket(endPoint.AddressFamily, SocketType.Stream,
ProtocolType.Tcp)

Try

tempSocket.Connect(endPoint)

Catch

MessageBox.Show("Erreur lors de la connexion : hôte non joignable.",
"Connexion", MessageBoxButtons.OK, MessageBoxIcon.Error)

Exit Function

End Try

If tempSocket.Connected Then

Socket = tempSocket

Exit For

Else

MessageBox.Show("Erreur lors de la connexion : non connecté.", "Connexion",
MessageBoxButtons.OK, MessageBoxIcon.Error)

Exit Function

End If

Next address

Return Socket

End Function



Private Sub tmrConnect_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles tmrConnect.Tick

If Socket.Available > 0 Then

bytes = Socket.Receive(Buffer, Buffer.Length, 0)

strTemp = strTemp + ascii.ASCII.GetString(Buffer, 0, bytes)

Select Case strTemp

Case ":connection:CLOSING"

Reset()

MessageBox.Show("Connexion coupée par le client ou l'hôte.", "Connexion",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

'strTemp = strTemp + ascii.ASCII.GetString(Buffer, 0, bytes)

'txtMessage.Text = strTemp & " Vient de ce déconnecter"

'strTemp = ""

'txtMessage.Text = ""

Exit Sub

Case ":connection:REFUSED"

Reset()

MessageBox.Show("Connexion refusée par l'hôte.", "Connexion",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

Exit Sub

Case ":connection:ACCEPTED"

MessageBox.Show("Connexion acceptée par l'hôte.", "Connexion",
MessageBoxButtons.OK, MessageBoxIcon.Information)

strTemp = ""

sbpConnection.Text = "Connecté !"

sbpConnection.Icon = New System.Drawing.Icon("TRFFC10A.ICO")

End Select

If strTemp <> "" Then

txtAff.Text += strTemp & vbCrLf

strTemp = ""

End If

End If

End Sub





"Gilles TOURREAU [MVP]" a écrit dans le message de
news:
"Sim" a écrit dans le message de
news:%
Bonjour a tous ,

Je suis entrain de devellopez un petit programme qui contient un "chat"
le
probleme c'est que je ne suis pas capable de connecter plus d'un client
au
serveur l'orsque le second client essaie de ce connecter et bien le
server
le reffuse :(



Pouvez-vous êtres plus explicite ?


quelqu'un aurait une iddée pk le serveur accept seulement 1 connexion a
la
fois.

Merci de votre aide




Créez-vous des thread dans le serveur à chaque fois qu'un client se
connecte ?

Cordialement

--
Gilles TOURREAU - MVP C#
E-Mail :
Site Web : http://gilles.tourreau.fr

P.O.S - Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr