PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   疑難雜症區 (https://www.pcdvd.com.tw/forumdisplay.php?f=34)
-   -   VB2005之socket 傳送 & 接收 問題請教 (https://www.pcdvd.com.tw/showthread.php?t=668270)

comefish 2006-11-03 02:24 PM

VB2005之socket 傳送 & 接收 問題請教
 
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拿來實作簡易聊天,請問題出在哪?

謝謝

comefish 2006-11-04 05:51 PM

自己推推 , 請教一下 ,謝謝

harrisonlin 2006-11-04 07:26 PM

VB 我就幫不上忙,不過想稱讚一下,您的發問方式很不錯,程式碼排列一目瞭然,如果在這裡問程式的人都能向仿效您的方式就好了...

socket programming 的問題太專業了,幫推一下,不知道 PCDVD 有沒有魔人可以回答? :)


所有的時間均為GMT +8。 現在的時間是04:57 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。