PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
comefish
Major Member
 

加入日期: Sep 2004
文章: 156
Question 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拿來實作簡易聊天,請問題出在哪?

謝謝
     
      
舊 2006-11-03, 02:24 PM #1
回應時引用此文章
comefish離線中  
comefish
Major Member
 

加入日期: Sep 2004
文章: 156
自己推推 , 請教一下 ,謝謝
 
舊 2006-11-04, 05:51 PM #2
回應時引用此文章
comefish離線中  
harrisonlin
Advance Member
 
harrisonlin的大頭照
 

加入日期: Jun 2003
您的住址: Taipei
文章: 442
VB 我就幫不上忙,不過想稱讚一下,您的發問方式很不錯,程式碼排列一目瞭然,如果在這裡問程式的人都能向仿效您的方式就好了...

socket programming 的問題太專業了,幫推一下,不知道 PCDVD 有沒有魔人可以回答?
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
舊 2006-11-04, 07:26 PM #3
回應時引用此文章
harrisonlin離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是01:29 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。