none
無法設定IPAddress屬性 RRS feed

  • 問題

  • 我的程式碼
    Code Server Code
    Dim IPNum As String = "127.0.0.1"
                Dim SevIP As IPAddress = IPAddress.Parse(IPNum)
                Dim tcps As New TcpListener(SevIP, Convert.ToInt32(LPort.Text))

                tcps.Start()
                LB.Items.Add("Server started at: " + SevIP.ToString() + ":" + LPort.Text)

                While True
                    LB.Items.Add("Waiting for connected!!")
                    Dim ClientSock As TcpClient = tcps.AcceptTcpClient()
                    LB.Items.Add("Connected!!")

                    Dim NetStream As NetworkStream = ClientSock.GetStream()
                    Dim Bytes() As Byte

                    If NetStream.CanRead Then
                        LB.Items.Add("BufferSize:" + ClientSock.ReceiveBufferSize.ToString)
                        ReDim Bytes(ClientSock.ReceiveBufferSize)
                        NetStream.Read(Bytes, 0, CInt(ClientSock.ReceiveBufferSize))
                        'LB2.Text = LB2.Text + Len.ToString
                        LB.Items.Add("Bytes String:" + Bytes.ToString)
                        MsgBox("Transfer Accompalish")
                    End If
                    Dim Buffer As New MemoryStream(Bytes)
                    Buffer.Position = 0
                    PB.Image = Image.FromStream(Buffer)

                    ClientSock.Close()
    在實際執行後  程式會當住
    在執行過程中:
    Dim SevIP As IPAddress = IPAddress.Parse(IPNum)


    這裡SevIP的值為Cannot obtain value

    不知道可能的問題在哪   檢查過.NET Framework有裝
    2007年5月30日 上午 07:44

解答

  • 謝謝各位的回答

    也幫助我測試出問題在那邊

     

    程式會當住主要是因為不斷的在等待Client方連線

    因為這程式不是用Thread寫的  所以才會造成form當住

     

    順便想問高手們  我的TCP 主從程式  兩邊所要傳送的資料是檔案轉成的資料流

     

    要如何做才能讓透過網路傳送到的資料流能正確的重組成原檔(就像一個簡易的FTP)

    2007年5月30日 下午 01:55
  • Hi,

    你可以利用BinaryReader來將檔案讀取成byte陣列,之後傳送到目標後再反轉回來;可以參考下面程式碼

    Code Snippet

    Public Class Form1

        Dim btyRead() As Byte

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim FS As New IO.FileStream("C:\lala-1.gif", IO.FileMode.Open)
            Dim BS As New IO.BinaryReader(FS)
            btyRead = BS.ReadBytes(FS.Length)
            BS.Close()
            FS.Close()
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim FS As New IO.FileStream("C:\tmp.gif", IO.FileMode.OpenOrCreate)
            Dim BW As New IO.BinaryWriter(FS)
            BW.Write(btyRead)
            BW.Flush()
            BW.Close()
            FS.Close()
            PictureBox1.Image = Image.FromFile("C:\tmp.gif")
        End Sub
    End Class

     

     

    2007年5月30日 下午 02:46
    版主

所有回覆

  • 你有 Imports System.Net 命名空間嗎?

     

    我試:

    Dim IPNum As String = "127.0.0.1"
      Dim SevIP As Net.IPAddress = Net.IPAddress.Parse(IPNum)
      Debug.Print(SevIP.ToString)

    正常。

     

    2007年5月30日 上午 08:54
    版主
  • 還是 C:\WINDOWS\system32\drivers\etc\hosts 沒有設 ?

     

    # Copyright (c) 1993-1999 Microsoft Corp.
    #
    # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
    #
    # This file contains the mappings of IP addresses to host names. Each
    # entry should be kept on an individual line. The IP address should
    # be placed in the first column followed by the corresponding host name.
    # The IP address and the host name should be separated by at least one
    # space.
    #
    # Additionally, comments (such as these) may be inserted on individual
    # lines or following the machine name denoted by a '#' symbol.
    #
    # For example:
    #
    #      102.54.94.97     rhino.acme.com          # source server
    #       38.25.63.10     x.acme.com              # x client host

    127.0.0.1       localhost

    2007年5月30日 上午 09:25
  • 這個是讓 localhost 對應到 127.0.0.1 ,直接用 127.0.0.1 時,不需要這個。
    2007年5月30日 上午 09:33
    版主
  • 謝謝前兩位的回答

    兩件我都檢查過了  都有

     

    Imports System.IO
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Threading

     

     

    我所參考的函示庫

     

    2007年5月30日 上午 09:34
  • 我也測試了

    跟你一樣 正常

     

    所以應該錯誤不在名稱

    而是在New 一個新的Listener或是在Create 一個TCPClient 時錯誤

     

    因為我按暫停程式Debug時

    是停在  Dim ClientSock As TcpClient = tcps.AcceptTcpClient()

     

    另外奇怪的是  前面的ListBox一句都沒Show出來

    2007年5月30日 上午 09:38
  • Hi,

    Listbox不會即時顯示的問題你可以加上doevents例如

    Code Snippet

    LB.Items.Add("Waiting for connected!!")
     Application.DoEvents()
     Dim ClientSock As TcpClient = tcps.AcceptTcpClient()

     

    另外有關PAddress.Parse的問題,是只有這個程式會這樣嗎?還是其它的都會,你可以重新安裝 framework2.0測試看看。
    2007年5月30日 下午 12:50
    版主
  • 謝謝各位的回答

    也幫助我測試出問題在那邊

     

    程式會當住主要是因為不斷的在等待Client方連線

    因為這程式不是用Thread寫的  所以才會造成form當住

     

    順便想問高手們  我的TCP 主從程式  兩邊所要傳送的資料是檔案轉成的資料流

     

    要如何做才能讓透過網路傳送到的資料流能正確的重組成原檔(就像一個簡易的FTP)

    2007年5月30日 下午 01:55
  • Hi,

    你可以利用BinaryReader來將檔案讀取成byte陣列,之後傳送到目標後再反轉回來;可以參考下面程式碼

    Code Snippet

    Public Class Form1

        Dim btyRead() As Byte

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim FS As New IO.FileStream("C:\lala-1.gif", IO.FileMode.Open)
            Dim BS As New IO.BinaryReader(FS)
            btyRead = BS.ReadBytes(FS.Length)
            BS.Close()
            FS.Close()
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim FS As New IO.FileStream("C:\tmp.gif", IO.FileMode.OpenOrCreate)
            Dim BW As New IO.BinaryWriter(FS)
            BW.Write(btyRead)
            BW.Flush()
            BW.Close()
            FS.Close()
            PictureBox1.Image = Image.FromFile("C:\tmp.gif")
        End Sub
    End Class

     

     

    2007年5月30日 下午 02:46
    版主