Bonjour à tous.
Pour l'école, il me faut développer un tchat (un programme serveur, et
un programme client) en vb.net et en utilisant les sockets.
J'ai donc commencé à développer ces deux programmes, serveur et client,
mais j'ai un souci avec le serveur : je le lance, je dis sur quel port
il doit écouter, je démarre l'écoute, puis après quelques secondes, il
se fige. Mais je n'arrive pas à trouver où se situe le problème !
Ci-dessous le code de mon serveur. Si quelqu'un pouvait m'aider à me
dépatouiller !!! (Il me faudrait un truc qui fonctionne à peu près pour
fin de semaine....)
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste
des composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As
Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur
Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents btnConnexion As System.Windows.Forms.Button
Friend WithEvents btnDeconnexion As System.Windows.Forms.Button
Friend WithEvents txtPort As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents txtMsg As System.Windows.Forms.TextBox
Friend WithEvents Timer As System.Windows.Forms.Timer
Friend WithEvents StatusBar1 As System.Windows.Forms.StatusBar
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.btnConnexion = New System.Windows.Forms.Button
Me.btnDeconnexion = New System.Windows.Forms.Button
Me.txtPort = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.txtMsg = New System.Windows.Forms.TextBox
Me.Timer = New System.Windows.Forms.Timer(Me.components)
Me.StatusBar1 = New System.Windows.Forms.StatusBar
Me.SuspendLayout()
'
'btnConnexion
'
Me.btnConnexion.Location = New System.Drawing.Point(328, 64)
Me.btnConnexion.Name = "btnConnexion"
Me.btnConnexion.Size = New System.Drawing.Size(176, 23)
Me.btnConnexion.TabIndex = 1
Me.btnConnexion.Text = "Démarrer le serveur"
'
'btnDeconnexion
'
Me.btnDeconnexion.Enabled = False
Me.btnDeconnexion.Location = New System.Drawing.Point(328, 104)
Me.btnDeconnexion.Name = "btnDeconnexion"
Me.btnDeconnexion.Size = New System.Drawing.Size(176, 23)
Me.btnDeconnexion.TabIndex = 2
Me.btnDeconnexion.Text = "Arrêter le serveur"
'
'txtPort
'
Me.txtPort.Location = New System.Drawing.Point(112, 64)
Me.txtPort.Name = "txtPort"
Me.txtPort.TabIndex = 0
Me.txtPort.Text = ""
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(56, 64)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(32, 16)
Me.Label1.TabIndex = 3
Me.Label1.Text = "Port :"
'
'txtMsg
'
Me.txtMsg.Location = New System.Drawing.Point(88, 192)
Me.txtMsg.Multiline = True
Me.txtMsg.Name = "txtMsg"
Me.txtMsg.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtMsg.Size = New System.Drawing.Size(424, 288)
Me.txtMsg.TabIndex = 3
Me.txtMsg.Text = ""
'
'Timer
'
Me.Timer.Interval = 1000
'
'StatusBar1
'
Me.StatusBar1.Location = New System.Drawing.Point(0, 504)
Me.StatusBar1.Name = "StatusBar1"
Me.StatusBar1.Size = New System.Drawing.Size(600, 22)
Me.StatusBar1.TabIndex = 5
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(600, 526)
Me.Controls.Add(Me.StatusBar1)
Me.Controls.Add(Me.txtMsg)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.txtPort)
Me.Controls.Add(Me.btnDeconnexion)
Me.Controls.Add(Me.btnConnexion)
Me.Name = "Form1"
Me.Text = "Serveur"
Me.ResumeLayout(False)
End Sub
#End Region
Dim MaSocketServeur As New Sockets.Socket
(Sockets.AddressFamily.InterNetwork, Sockets.SocketType.Stream,
Net.Sockets.ProtocolType.Tcp)
Dim MaSocketClient As New Sockets.Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
Dim IPClient As IPAddress
Dim PortClient As Integer
Dim buff(655360) As Byte
Dim ListeClients As ArrayList = New ArrayList
Dim ListeThreads As ArrayList = New ArrayList
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
End Sub
Private Sub btnConnexion_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles btnConnexion.Click
Dim Port As Integer = Int32.Parse(txtPort.Text)
Dim IPAdresse As IPAddress = System.Net.IPAddress.Parse
("127.0.0.1")
Dim IPServeur = New IPEndPoint(IPAdresse, Port)
MaSocketServeur.Bind(IPServeur)
Me.txtMsg.Text &= "Le serveur a été lancé à l'adresse " &
IPAdresse.ToString & " et sur le port " & Me.txtPort.Text & " à " & Hour
(Now) & "h" & Minute(Now) & "m" & Second(Now) & "s." &
Environment.NewLine
Me.btnConnexion.Enabled = False
Me.btnDeconnexion.Enabled = True
IPClient = CType(MaSocketClient.RemoteEndPoint,
IPEndPoint).Address
PortClient = CType(MaSocketClient.RemoteEndPoint,
IPEndPoint).Port
Me.txtMsg.Text &= "Nouveau client connecté : " &
IPClient.ToString & " Port " & PortClient.ToString & Environment.NewLine
StatusBar1.Text = "En écoute"
MaSocketClient.Receive(buff)
'MaSocketClient.Send(buff)
envoi(buff)
Me.txtMsg.Text &= Encoding.ASCII.GetString(buff) &
Environment.NewLine
Catch
StatusBar1.Text = "Erreur écoute"
Exit While
End Try
End While
End Sub
Private Sub envoi(ByVal b() As Byte)
Dim so As Socket
For Each so In ListeClients
If so.Connected Then
Try
so.Send(b)
'so.Send(null, 0, 1, SocketFlags.None)
Catch e As Exception
MessageBox.Show(e.ToString())
End Try
End If
Next so
End Sub
Private Sub btnDeconnexion_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnDeconnexion.Click
MaSocketServeur.Close()
Me.txtMsg.Text &= "Le serveur a été arrêté à " & Hour(Now) &
"h" & Minute(Now) & "m" & Second(Now) & "s." & Environment.NewLine
StatusBar1.Text = "Serveur déconnecté"
Me.btnConnexion.Enabled = True
Me.btnDeconnexion.Enabled = False
End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer.Tick
If MaSocketServeur.Connected Then
Try
MaSocketServeur.Receive(buff)
Catch
End Try
Try
MaSocketServeur.Send(buff)
Catch
End Try
ElseIf MaSocketClient.Connected Then
Try
MaSocketClient.Receive(buff)
Catch
End Try
End If
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilles TOURREAU
Le Tue, 13 Nov 2007 08:51:50 +0100, pilouze a écrit:
Bonjour à tous. Pour l'école, il me faut développer un tchat (un programme serveur, et un programme client) en vb.net et en utilisant les sockets. J'ai donc commencé à développer ces deux programmes, serveur et client, mais j'ai un souci avec le serveur : je le lance, je dis sur quel port il doit écouter, je démarre l'écoute, puis après quelques secondes, il se fige. Mais je n'arrive pas à trouver où se situe le problème ! Ci-dessous le code de mon serveur. Si quelqu'un pouvait m'aider à me dépatouiller !!! (Il me faudrait un truc qui fonctionne à peu près pour fin de semaine....)
Public Class Form1 Inherits System.Windows.Forms.Form
#Region " Code généré par le Concepteur Windows Form "
Public Sub New() MyBase.New()
'Cet appel est requis par le Concepteur Windows Form. InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub
'Requis par le Concepteur Windows Form Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form 'Elle peut être modifiée en utilisant le Concepteur Windows Form. 'Ne la modifiez pas en utilisant l'éditeur de code. Friend WithEvents btnConnexion As System.Windows.Forms.Button Friend WithEvents btnDeconnexion As System.Windows.Forms.Button Friend WithEvents txtPort As System.Windows.Forms.TextBox Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents txtMsg As System.Windows.Forms.TextBox Friend WithEvents Timer As System.Windows.Forms.Timer Friend WithEvents StatusBar1 As System.Windows.Forms.StatusBar <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container Me.btnConnexion = New System.Windows.Forms.Button Me.btnDeconnexion = New System.Windows.Forms.Button Me.txtPort = New System.Windows.Forms.TextBox Me.Label1 = New System.Windows.Forms.Label Me.txtMsg = New System.Windows.Forms.TextBox Me.Timer = New System.Windows.Forms.Timer(Me.components) Me.StatusBar1 = New System.Windows.Forms.StatusBar Me.SuspendLayout() ' 'btnConnexion ' Me.btnConnexion.Location = New System.Drawing.Point(328, 64) Me.btnConnexion.Name = "btnConnexion" Me.btnConnexion.Size = New System.Drawing.Size(176, 23) Me.btnConnexion.TabIndex = 1 Me.btnConnexion.Text = "Démarrer le serveur" ' 'btnDeconnexion ' Me.btnDeconnexion.Enabled = False Me.btnDeconnexion.Location = New System.Drawing.Point(328, 104) Me.btnDeconnexion.Name = "btnDeconnexion" Me.btnDeconnexion.Size = New System.Drawing.Size(176, 23) Me.btnDeconnexion.TabIndex = 2 Me.btnDeconnexion.Text = "Arrêter le serveur" ' 'txtPort ' Me.txtPort.Location = New System.Drawing.Point(112, 64) Me.txtPort.Name = "txtPort" Me.txtPort.TabIndex = 0 Me.txtPort.Text = "" ' 'Label1 ' Me.Label1.Location = New System.Drawing.Point(56, 64) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(32, 16) Me.Label1.TabIndex = 3 Me.Label1.Text = "Port :" ' 'txtMsg ' Me.txtMsg.Location = New System.Drawing.Point(88, 192) Me.txtMsg.Multiline = True Me.txtMsg.Name = "txtMsg" Me.txtMsg.ScrollBars = System.Windows.Forms.ScrollBars.Vertical Me.txtMsg.Size = New System.Drawing.Size(424, 288) Me.txtMsg.TabIndex = 3 Me.txtMsg.Text = "" ' 'Timer ' Me.Timer.Interval = 1000 ' 'StatusBar1 ' Me.StatusBar1.Location = New System.Drawing.Point(0, 504) Me.StatusBar1.Name = "StatusBar1" Me.StatusBar1.Size = New System.Drawing.Size(600, 22) Me.StatusBar1.TabIndex = 5 ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(600, 526) Me.Controls.Add(Me.StatusBar1) Me.Controls.Add(Me.txtMsg) Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.txtPort) Me.Controls.Add(Me.btnDeconnexion) Me.Controls.Add(Me.btnConnexion) Me.Name = "Form1" Me.Text = "Serveur" Me.ResumeLayout(False)
End Sub
#End Region
Dim MaSocketServeur As New Sockets.Socket (Sockets.AddressFamily.InterNetwork, Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp) Dim MaSocketClient As New Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Dim IPClient As IPAddress Dim PortClient As Integer Dim buff(655360) As Byte Dim ListeClients As ArrayList = New ArrayList Dim ListeThreads As ArrayList = New ArrayList
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub btnConnexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnexion.Click Dim Port As Integer = Int32.Parse(txtPort.Text) Dim IPAdresse As IPAddress = System.Net.IPAddress.Parse ("127.0.0.1") Dim IPServeur = New IPEndPoint(IPAdresse, Port)
MaSocketServeur.Bind(IPServeur) Me.txtMsg.Text &= "Le serveur a été lancé à l'adresse " & IPAdresse.ToString & " et sur le port " & Me.txtPort.Text & " à " & Hour (Now) & "h" & Minute(Now) & "m" & Second(Now) & "s." & Environment.NewLine Me.btnConnexion.Enabled = False Me.btnDeconnexion.Enabled = True
IPClient = CType(MaSocketClient.RemoteEndPoint, IPEndPoint).Address PortClient = CType(MaSocketClient.RemoteEndPoint, IPEndPoint).Port Me.txtMsg.Text &= "Nouveau client connecté : " & IPClient.ToString & " Port " & PortClient.ToString & Environment.NewLine StatusBar1.Text = "En écoute" MaSocketClient.Receive(buff) 'MaSocketClient.Send(buff) envoi(buff) Me.txtMsg.Text &= Encoding.ASCII.GetString(buff) & Environment.NewLine Catch StatusBar1.Text = "Erreur écoute" Exit While End Try End While
End Sub
Private Sub envoi(ByVal b() As Byte) Dim so As Socket
For Each so In ListeClients
If so.Connected Then Try so.Send(b) 'so.Send(null, 0, 1, SocketFlags.None) Catch e As Exception MessageBox.Show(e.ToString()) End Try
End If
Next so End Sub Private Sub btnDeconnexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeconnexion.Click
MaSocketServeur.Close()
Me.txtMsg.Text &= "Le serveur a été arrêté à " & Hour(Now) & "h" & Minute(Now) & "m" & Second(Now) & "s." & Environment.NewLine StatusBar1.Text = "Serveur déconnecté" Me.btnConnexion.Enabled = True Me.btnDeconnexion.Enabled = False End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick If MaSocketServeur.Connected Then Try MaSocketServeur.Receive(buff) Catch End Try Try MaSocketServeur.Send(buff) Catch End Try ElseIf MaSocketClient.Connected Then Try MaSocketClient.Receive(buff) Catch End Try End If End Sub
End Class
Pouvez-vous m'envoyer votre projet Client et Serveur sur
Cordialement
-- Gilles TOURREAU
S.A.R.L. P.O.S Le spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
Le Tue, 13 Nov 2007 08:51:50 +0100, pilouze <pilouze@pilouze.com> a écrit:
Bonjour à tous.
Pour l'école, il me faut développer un tchat (un programme serveur, et
un programme client) en vb.net et en utilisant les sockets.
J'ai donc commencé à développer ces deux programmes, serveur et client,
mais j'ai un souci avec le serveur : je le lance, je dis sur quel port
il doit écouter, je démarre l'écoute, puis après quelques secondes, il
se fige. Mais je n'arrive pas à trouver où se situe le problème !
Ci-dessous le code de mon serveur. Si quelqu'un pouvait m'aider à me
dépatouiller !!! (Il me faudrait un truc qui fonctionne à peu près pour
fin de semaine....)
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste
des composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As
Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur
Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents btnConnexion As System.Windows.Forms.Button
Friend WithEvents btnDeconnexion As System.Windows.Forms.Button
Friend WithEvents txtPort As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents txtMsg As System.Windows.Forms.TextBox
Friend WithEvents Timer As System.Windows.Forms.Timer
Friend WithEvents StatusBar1 As System.Windows.Forms.StatusBar
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.btnConnexion = New System.Windows.Forms.Button
Me.btnDeconnexion = New System.Windows.Forms.Button
Me.txtPort = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.txtMsg = New System.Windows.Forms.TextBox
Me.Timer = New System.Windows.Forms.Timer(Me.components)
Me.StatusBar1 = New System.Windows.Forms.StatusBar
Me.SuspendLayout()
'
'btnConnexion
'
Me.btnConnexion.Location = New System.Drawing.Point(328, 64)
Me.btnConnexion.Name = "btnConnexion"
Me.btnConnexion.Size = New System.Drawing.Size(176, 23)
Me.btnConnexion.TabIndex = 1
Me.btnConnexion.Text = "Démarrer le serveur"
'
'btnDeconnexion
'
Me.btnDeconnexion.Enabled = False
Me.btnDeconnexion.Location = New System.Drawing.Point(328, 104)
Me.btnDeconnexion.Name = "btnDeconnexion"
Me.btnDeconnexion.Size = New System.Drawing.Size(176, 23)
Me.btnDeconnexion.TabIndex = 2
Me.btnDeconnexion.Text = "Arrêter le serveur"
'
'txtPort
'
Me.txtPort.Location = New System.Drawing.Point(112, 64)
Me.txtPort.Name = "txtPort"
Me.txtPort.TabIndex = 0
Me.txtPort.Text = ""
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(56, 64)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(32, 16)
Me.Label1.TabIndex = 3
Me.Label1.Text = "Port :"
'
'txtMsg
'
Me.txtMsg.Location = New System.Drawing.Point(88, 192)
Me.txtMsg.Multiline = True
Me.txtMsg.Name = "txtMsg"
Me.txtMsg.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtMsg.Size = New System.Drawing.Size(424, 288)
Me.txtMsg.TabIndex = 3
Me.txtMsg.Text = ""
'
'Timer
'
Me.Timer.Interval = 1000
'
'StatusBar1
'
Me.StatusBar1.Location = New System.Drawing.Point(0, 504)
Me.StatusBar1.Name = "StatusBar1"
Me.StatusBar1.Size = New System.Drawing.Size(600, 22)
Me.StatusBar1.TabIndex = 5
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(600, 526)
Me.Controls.Add(Me.StatusBar1)
Me.Controls.Add(Me.txtMsg)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.txtPort)
Me.Controls.Add(Me.btnDeconnexion)
Me.Controls.Add(Me.btnConnexion)
Me.Name = "Form1"
Me.Text = "Serveur"
Me.ResumeLayout(False)
End Sub
#End Region
Dim MaSocketServeur As New Sockets.Socket
(Sockets.AddressFamily.InterNetwork, Sockets.SocketType.Stream,
Net.Sockets.ProtocolType.Tcp)
Dim MaSocketClient As New Sockets.Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
Dim IPClient As IPAddress
Dim PortClient As Integer
Dim buff(655360) As Byte
Dim ListeClients As ArrayList = New ArrayList
Dim ListeThreads As ArrayList = New ArrayList
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
End Sub
Private Sub btnConnexion_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles btnConnexion.Click
Dim Port As Integer = Int32.Parse(txtPort.Text)
Dim IPAdresse As IPAddress = System.Net.IPAddress.Parse
("127.0.0.1")
Dim IPServeur = New IPEndPoint(IPAdresse, Port)
MaSocketServeur.Bind(IPServeur)
Me.txtMsg.Text &= "Le serveur a été lancé à l'adresse " &
IPAdresse.ToString & " et sur le port " & Me.txtPort.Text & " à " & Hour
(Now) & "h" & Minute(Now) & "m" & Second(Now) & "s." &
Environment.NewLine
Me.btnConnexion.Enabled = False
Me.btnDeconnexion.Enabled = True
IPClient = CType(MaSocketClient.RemoteEndPoint,
IPEndPoint).Address
PortClient = CType(MaSocketClient.RemoteEndPoint,
IPEndPoint).Port
Me.txtMsg.Text &= "Nouveau client connecté : " &
IPClient.ToString & " Port " & PortClient.ToString & Environment.NewLine
StatusBar1.Text = "En écoute"
MaSocketClient.Receive(buff)
'MaSocketClient.Send(buff)
envoi(buff)
Me.txtMsg.Text &= Encoding.ASCII.GetString(buff) &
Environment.NewLine
Catch
StatusBar1.Text = "Erreur écoute"
Exit While
End Try
End While
End Sub
Private Sub envoi(ByVal b() As Byte)
Dim so As Socket
For Each so In ListeClients
If so.Connected Then
Try
so.Send(b)
'so.Send(null, 0, 1, SocketFlags.None)
Catch e As Exception
MessageBox.Show(e.ToString())
End Try
End If
Next so
End Sub
Private Sub btnDeconnexion_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnDeconnexion.Click
MaSocketServeur.Close()
Me.txtMsg.Text &= "Le serveur a été arrêté à " & Hour(Now) &
"h" & Minute(Now) & "m" & Second(Now) & "s." & Environment.NewLine
StatusBar1.Text = "Serveur déconnecté"
Me.btnConnexion.Enabled = True
Me.btnDeconnexion.Enabled = False
End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer.Tick
If MaSocketServeur.Connected Then
Try
MaSocketServeur.Receive(buff)
Catch
End Try
Try
MaSocketServeur.Send(buff)
Catch
End Try
ElseIf MaSocketClient.Connected Then
Try
MaSocketClient.Receive(buff)
Catch
End Try
End If
End Sub
End Class
Pouvez-vous m'envoyer votre projet Client et Serveur sur
gilles.tourreau@pos.fr
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Tue, 13 Nov 2007 08:51:50 +0100, pilouze a écrit:
Bonjour à tous. Pour l'école, il me faut développer un tchat (un programme serveur, et un programme client) en vb.net et en utilisant les sockets. J'ai donc commencé à développer ces deux programmes, serveur et client, mais j'ai un souci avec le serveur : je le lance, je dis sur quel port il doit écouter, je démarre l'écoute, puis après quelques secondes, il se fige. Mais je n'arrive pas à trouver où se situe le problème ! Ci-dessous le code de mon serveur. Si quelqu'un pouvait m'aider à me dépatouiller !!! (Il me faudrait un truc qui fonctionne à peu près pour fin de semaine....)
Public Class Form1 Inherits System.Windows.Forms.Form
#Region " Code généré par le Concepteur Windows Form "
Public Sub New() MyBase.New()
'Cet appel est requis par le Concepteur Windows Form. InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub
'Requis par le Concepteur Windows Form Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form 'Elle peut être modifiée en utilisant le Concepteur Windows Form. 'Ne la modifiez pas en utilisant l'éditeur de code. Friend WithEvents btnConnexion As System.Windows.Forms.Button Friend WithEvents btnDeconnexion As System.Windows.Forms.Button Friend WithEvents txtPort As System.Windows.Forms.TextBox Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents txtMsg As System.Windows.Forms.TextBox Friend WithEvents Timer As System.Windows.Forms.Timer Friend WithEvents StatusBar1 As System.Windows.Forms.StatusBar <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container Me.btnConnexion = New System.Windows.Forms.Button Me.btnDeconnexion = New System.Windows.Forms.Button Me.txtPort = New System.Windows.Forms.TextBox Me.Label1 = New System.Windows.Forms.Label Me.txtMsg = New System.Windows.Forms.TextBox Me.Timer = New System.Windows.Forms.Timer(Me.components) Me.StatusBar1 = New System.Windows.Forms.StatusBar Me.SuspendLayout() ' 'btnConnexion ' Me.btnConnexion.Location = New System.Drawing.Point(328, 64) Me.btnConnexion.Name = "btnConnexion" Me.btnConnexion.Size = New System.Drawing.Size(176, 23) Me.btnConnexion.TabIndex = 1 Me.btnConnexion.Text = "Démarrer le serveur" ' 'btnDeconnexion ' Me.btnDeconnexion.Enabled = False Me.btnDeconnexion.Location = New System.Drawing.Point(328, 104) Me.btnDeconnexion.Name = "btnDeconnexion" Me.btnDeconnexion.Size = New System.Drawing.Size(176, 23) Me.btnDeconnexion.TabIndex = 2 Me.btnDeconnexion.Text = "Arrêter le serveur" ' 'txtPort ' Me.txtPort.Location = New System.Drawing.Point(112, 64) Me.txtPort.Name = "txtPort" Me.txtPort.TabIndex = 0 Me.txtPort.Text = "" ' 'Label1 ' Me.Label1.Location = New System.Drawing.Point(56, 64) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(32, 16) Me.Label1.TabIndex = 3 Me.Label1.Text = "Port :" ' 'txtMsg ' Me.txtMsg.Location = New System.Drawing.Point(88, 192) Me.txtMsg.Multiline = True Me.txtMsg.Name = "txtMsg" Me.txtMsg.ScrollBars = System.Windows.Forms.ScrollBars.Vertical Me.txtMsg.Size = New System.Drawing.Size(424, 288) Me.txtMsg.TabIndex = 3 Me.txtMsg.Text = "" ' 'Timer ' Me.Timer.Interval = 1000 ' 'StatusBar1 ' Me.StatusBar1.Location = New System.Drawing.Point(0, 504) Me.StatusBar1.Name = "StatusBar1" Me.StatusBar1.Size = New System.Drawing.Size(600, 22) Me.StatusBar1.TabIndex = 5 ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(600, 526) Me.Controls.Add(Me.StatusBar1) Me.Controls.Add(Me.txtMsg) Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.txtPort) Me.Controls.Add(Me.btnDeconnexion) Me.Controls.Add(Me.btnConnexion) Me.Name = "Form1" Me.Text = "Serveur" Me.ResumeLayout(False)
End Sub
#End Region
Dim MaSocketServeur As New Sockets.Socket (Sockets.AddressFamily.InterNetwork, Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp) Dim MaSocketClient As New Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Dim IPClient As IPAddress Dim PortClient As Integer Dim buff(655360) As Byte Dim ListeClients As ArrayList = New ArrayList Dim ListeThreads As ArrayList = New ArrayList
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub btnConnexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnexion.Click Dim Port As Integer = Int32.Parse(txtPort.Text) Dim IPAdresse As IPAddress = System.Net.IPAddress.Parse ("127.0.0.1") Dim IPServeur = New IPEndPoint(IPAdresse, Port)
MaSocketServeur.Bind(IPServeur) Me.txtMsg.Text &= "Le serveur a été lancé à l'adresse " & IPAdresse.ToString & " et sur le port " & Me.txtPort.Text & " à " & Hour (Now) & "h" & Minute(Now) & "m" & Second(Now) & "s." & Environment.NewLine Me.btnConnexion.Enabled = False Me.btnDeconnexion.Enabled = True
IPClient = CType(MaSocketClient.RemoteEndPoint, IPEndPoint).Address PortClient = CType(MaSocketClient.RemoteEndPoint, IPEndPoint).Port Me.txtMsg.Text &= "Nouveau client connecté : " & IPClient.ToString & " Port " & PortClient.ToString & Environment.NewLine StatusBar1.Text = "En écoute" MaSocketClient.Receive(buff) 'MaSocketClient.Send(buff) envoi(buff) Me.txtMsg.Text &= Encoding.ASCII.GetString(buff) & Environment.NewLine Catch StatusBar1.Text = "Erreur écoute" Exit While End Try End While
End Sub
Private Sub envoi(ByVal b() As Byte) Dim so As Socket
For Each so In ListeClients
If so.Connected Then Try so.Send(b) 'so.Send(null, 0, 1, SocketFlags.None) Catch e As Exception MessageBox.Show(e.ToString()) End Try
End If
Next so End Sub Private Sub btnDeconnexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeconnexion.Click
MaSocketServeur.Close()
Me.txtMsg.Text &= "Le serveur a été arrêté à " & Hour(Now) & "h" & Minute(Now) & "m" & Second(Now) & "s." & Environment.NewLine StatusBar1.Text = "Serveur déconnecté" Me.btnConnexion.Enabled = True Me.btnDeconnexion.Enabled = False End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick If MaSocketServeur.Connected Then Try MaSocketServeur.Receive(buff) Catch End Try Try MaSocketServeur.Send(buff) Catch End Try ElseIf MaSocketClient.Connected Then Try MaSocketClient.Receive(buff) Catch End Try End If End Sub
End Class
Pouvez-vous m'envoyer votre projet Client et Serveur sur
Cordialement
-- Gilles TOURREAU
S.A.R.L. P.O.S Le spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr