pooya1072
یک شنبه 17 دی 1391, 18:53 عصر
سلام
من یه برنامه چت خیلی ابتدایی ساختم . تمام برنامه مربوط به سوکت رو توی یک تابع نوشتم . در حالت عادی با اجرای برنامه سرور , فرم اصلیه برنامه قفل میشه و تا وقتی اجراست منتظره تا از کلاینت پیامی دریافت کنه . حتی برنامه رو نمیشه بست . حالا من اومدم و برنامه رو از طریق thread اجرا کنم ولی اجرا نمیشه . هم تابع اصلی و هم تابع thread رو می ذارم . ببینید می تونید منو راهنمایی کنید.
Public Sub Chat()
While OutputForm.CheckBox1.Checked = True
Try
Dim ip As IPAddress = GetMyIP()
Dim SysPort As Int32 = Convert.ToInt32(Server.txtPort.Text)
Dim TCPlistener As TcpListener = New TcpListener(ip, SysPort)
TCPlistener.Start()
Server.ListBox1.Items.Clear()
Server.ListBox1.Items.Add("The server is ruuning as port :" & Str(SysPort))
Dim MyEndpoint As IPEndPoint = CType(TCPlistener.LocalEndpoint, IPEndPoint)
Server.ListBox1.Items.Add("The local EndPoint address is :" & MyEndpoint.Address.ToString)
Server.ListBox1.Items.Add("Waiting for connectiom ...")
Dim sock As Socket = TCPlistener.AcceptSocket
MyEndpoint = CType(sock.RemoteEndPoint, IPEndPoint)
Server.ListBox1.Items.Add("Connection accepted from :" & MyEndpoint.Address.ToString)
Dim ByteData(100) As Byte
Dim size As Integer = sock.Receive(ByteData)
Server.ListBox1.Items.Add("Recieved")
Dim RecieveText As String = Nothing
For i = 0 To size
RecieveText = RecieveText & Convert.ToChar(ByteData(i))
Next
Server.ListBox1.Items.Add(RecieveText)
Dim AsciiEncod As New ASCIIEncoding
Server.ListBox1.Items.Add("Sending alert to client !")
sock.Send(AsciiEncod.GetBytes("The string was recieved by the server !"))
sock.Close()
Server.Refresh()
TCPlistener.Stop()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End While
End Sub
اینم تابع thread :
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
Dim t As New Threading.Thread(AddressOf Chat)
t.Start()
End Sub
من یه برنامه چت خیلی ابتدایی ساختم . تمام برنامه مربوط به سوکت رو توی یک تابع نوشتم . در حالت عادی با اجرای برنامه سرور , فرم اصلیه برنامه قفل میشه و تا وقتی اجراست منتظره تا از کلاینت پیامی دریافت کنه . حتی برنامه رو نمیشه بست . حالا من اومدم و برنامه رو از طریق thread اجرا کنم ولی اجرا نمیشه . هم تابع اصلی و هم تابع thread رو می ذارم . ببینید می تونید منو راهنمایی کنید.
Public Sub Chat()
While OutputForm.CheckBox1.Checked = True
Try
Dim ip As IPAddress = GetMyIP()
Dim SysPort As Int32 = Convert.ToInt32(Server.txtPort.Text)
Dim TCPlistener As TcpListener = New TcpListener(ip, SysPort)
TCPlistener.Start()
Server.ListBox1.Items.Clear()
Server.ListBox1.Items.Add("The server is ruuning as port :" & Str(SysPort))
Dim MyEndpoint As IPEndPoint = CType(TCPlistener.LocalEndpoint, IPEndPoint)
Server.ListBox1.Items.Add("The local EndPoint address is :" & MyEndpoint.Address.ToString)
Server.ListBox1.Items.Add("Waiting for connectiom ...")
Dim sock As Socket = TCPlistener.AcceptSocket
MyEndpoint = CType(sock.RemoteEndPoint, IPEndPoint)
Server.ListBox1.Items.Add("Connection accepted from :" & MyEndpoint.Address.ToString)
Dim ByteData(100) As Byte
Dim size As Integer = sock.Receive(ByteData)
Server.ListBox1.Items.Add("Recieved")
Dim RecieveText As String = Nothing
For i = 0 To size
RecieveText = RecieveText & Convert.ToChar(ByteData(i))
Next
Server.ListBox1.Items.Add(RecieveText)
Dim AsciiEncod As New ASCIIEncoding
Server.ListBox1.Items.Add("Sending alert to client !")
sock.Send(AsciiEncod.GetBytes("The string was recieved by the server !"))
sock.Close()
Server.Refresh()
TCPlistener.Stop()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End While
End Sub
اینم تابع thread :
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
Dim t As New Threading.Thread(AddressOf Chat)
t.Start()
End Sub