![]() |
||
Major Member
![]() 加入日期: Sep 2004
文章: 156
|
![]() 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拿來實作簡易聊天,請問題出在哪? 謝謝 |
|||||||
![]() |
![]() |
Major Member
![]() 加入日期: Sep 2004
文章: 156
|
自己推推 , 請教一下 ,謝謝
|
||
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Jun 2003 您的住址: Taipei
文章: 442
|
VB 我就幫不上忙,不過想稱讚一下,您的發問方式很不錯,程式碼排列一目瞭然,如果在這裡問程式的人都能向仿效您的方式就好了...
socket programming 的問題太專業了,幫推一下,不知道 PCDVD 有沒有魔人可以回答? ![]()
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古... ![]() |
![]() |
![]() |