server主機端的部份
datetimeserver.vb
代碼:
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Public Class DateTimeServer
Public Shared Sub Main()
Dim serverSocket As System.Net.Sockets.Socket
Try
Dim hostname As String = Dns.GetHostName()
Dim serverIP As IPAddress = Dns.Resolve(hostname).AddressList(0)
' DateTime Server Port = 13
Dim Port As String = "13"
Dim serverhost As New IPEndPoint(serverIP, Int32.Parse(Port))
serverSocket = New Socket( _
AddressFamily.InterNetwork, _
SocketType.Stream, _
ProtocolType.Tcp)
serverSocket.Bind(serverhost)
' Backlog = 50
serverSocket.Listen(50)
Console.WriteLine("DateTime server started at: " + serverhost.Address.ToString() + ":" + Port)
Dim lc As New ListenClient(serverSocket)
Dim serverthread As New Thread( _
New ThreadStart(AddressOf lc.ServerThreadProc))
serverthread.Start()
Catch ex As Exception
Console.WriteLine(ex.StackTrace.ToString())
End Try
End Sub
End Class
listenclient.vb
代碼:
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Text
Public Class ListenClient
Private serverSocket As System.Net.Sockets.Socket
' 建構函式
Public Sub New(ByVal serverSocket As System.Net.Sockets.Socket)
Me.serverSocket = serverSocket
End Sub
Public Sub ServerThreadProc()
Dim clientSocket As System.Net.Sockets.Socket
Try
While (True)
clientSocket = serverSocket.Accept()
Dim clientInfo As IPEndPoint = CType( _
clientSocket.RemoteEndPoint, _
IPEndPoint)
Dim serverInfo As IPEndPoint = CType( _
serverSocket.LocalEndPoint, _
IPEndPoint)
Dim recvbytes(1024) As Byte
Dim i As Integer = clientSocket.Receive(recvbytes, 0, clientSocket.Available, SocketFlags.None)
Dim datetime As String = Encoding.ASCII.GetString(recvbytes, 0, i)
Console.WriteLine("Receive {0} bytes.", i)
Console.WriteLine("Current server date/Time: {0}", datetime)
clientSocket.Shutdown(SocketShutdown.Both)
clientSocket.Close()
End While
Catch ex As Exception
Console.WriteLine(ex.StackTrace.ToString())
If clientSocket.Connected Then
clientSocket.Close()
End If
End Try
End Sub
End Class
client接收端的部份
datetimeclient
代碼:
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Public Class DateTimeClient
Public Shared Sub Main()
Dim args As String() = Environment.GetCommandLineArgs()
If (args.Length < 2) Then
Console.WriteLine("Usage: DateTimeClient [DateTimeServer DNS/IP]")
Exit Sub
End If
Dim serverHost As String = args(1)
Dim hostadd As IPAddress = Dns.Resolve(serverHost).AddressList(0)
Dim EPhost As New IPEndPoint(hostadd, 13)
Dim clientSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Try
clientSocket.Connect(EPhost)
Catch ex As Exception
Console.WriteLine(ex.ToString())
End Try
Try
Dim strDate As String = datetime.Now.ToShortDateString() + " " + datetime.Now.ToLongTimeString()
Dim byteDateLine() As Byte = Encoding.ASCII.GetBytes(strDate.ToCharArray())
clientSocket.Send(byteDateLine, byteDateLine.Length, SocketFlags.None)
clientSocket.Shutdown(SocketShutdown.Both)
clientSocket.Close()
Catch ec As Exception
Console.WriteLine(ec.StackTrace.ToString())
Exit Sub
End Try
Console.WriteLine("Press any key to exit.")
Console.Read()
End Sub
End Class
小弟想從接收端送出時間資料給主機端接收,然後顯示在主機端的終端機上
但是只有第1次可以接收並顯示在主機端的終端機上,第2次主機端就沒接到任何Byte
把主機端重啟,就又可以接收,但是也是只能收一次?
請問為什麼會這樣?
小弟是想把socket拿來實作簡易聊天,請問題出在哪?
謝謝