● 伺服端應用程式

System.Net.Sockets.Socket 類別
System.Net.Sockets.TcpListener 類別
Socket
  (IPEndPoint)
Bind

Listen

Accept

  Receive / ReceiveFrom
  Send / SendTo
  (Shutdown)
Close

TcpListener



Start

AcceptSocket / AcceptTcpClient

  Read / ReadByte
  Write / WriteByte

Stop

<====== Socket 類別 ======>

例外錯誤

SocketException:參數 AddressFamily、SocketType、ProtocolType 組合所產生的無效通訊端。

Imports System.Net.Sockets

...

Try

    Dim srvSocket As New Socket( _

        AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

...

Catch ex As SocketException

'參數 AddressFamily、SocketType、ProtocolType 組合所產生的無效通訊端

...

End Try

 

Imports System.Net

...

Try

    Dim srvIP As IPAddress = IPAddress.Parse("127.0.0.1")

    '以DNS名稱代替IP位址

    Dim srvIP As IPAddress = Dns.Resolve("localhost").AddressList(0)

    Dim srvHost As New IPEndPoint(srvIP, 80)

    '以GetHostName方法取得本機電腦的主機名稱

    Dim srvIP As IPAddress = Dns.Resolve(Dns.GetHostName).AddressList(0)

...

Catch ex As Argumentexception

'參數 EndPoint 為 Nothing

...

End Try

Bind 方法:

例外錯誤

System.ArgumentNullException:參數 EndPoint 為 Nothing。

System.Net.Sockets.SocketException:存取 Socket 時發生作業系統錯誤。

System.ObjectDisposedException:Socket 已關閉。

System.Security.SecurityException:沒有權限建立 Socket。

Listen 方法:參數為設定伺服器最大用戶端連結數,可設定int.MaxValue。

例外錯誤

System.Net.Sockets.SocketException:存取 Socket 時發生作業系統錯誤。

System.ObjectDisposedException:Socket 已關閉。

Imports System.Net

Imports System.Net.Sockets

...

Try

    Dim srvSocket As New Socket( _

        AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

    Dim srvIP As IPAddress = IPAddress.Parse("127.0.0.1")

    Dim srvHost As New IPEndPoint(srvIP, 80)

    srvSocket.Bind(srvHost)

    srvSocket.Listen(10)

...

Catch ex As SocketException

...

End Try

Accept 方法:接受用戶端的連線請求,傳回值為 Socket 物件。

例外錯誤

System.Net.Sockets.SocketException:存取 Socket 時發生作業系統錯誤。

System.ObjectDisposedException:Socket 已關閉。

System.InvalidOperationException:在執行 Accept 方法之前須先執行 Bind 與 Listen 方法。

傳送資料

Send 方法:

SendTo 方法:

SendFile 方法:

接收資料

Receive 方法:

ReceiveFrom 方法:

ReceiveMessageFrom 方法:

 

Shutdown 方法:為避免伺服端應用程式在關閉之前仍在傳送或接收資料而使用,來暫停伺服端 Socket 上的傳送和接收作業。

參數

SocketShutdown.Send:暫停傳送作業。

SocketShutdown.Receive:暫停接收作業。

SocketShutdown.Both:同時暫停傳送和接收作業。

例外錯誤

System.Net.Sockets.SocketException:存取 Socket 時發生作業系統錯誤。

System.ObjectDisposedException:Socket 已關閉。

Close 方法:關閉伺服端 Socket。

 

...

    srvSocket.Shutdown(SocketShutdown.Both)

    srvSocket.Close(10)

...

    If srvSocket.Connected Then

...

    End If

 

<====== TcpListener 類別 ======>

例外錯誤

System.ArgumentOutOfRangeException:參數 port 不介於 MinPort 和 MaxPort 之間。

System.ArgumentNullException:參數 localEP 或 localaddr 為 Nothing。

 

Imports System.Net

Imports System.Net.Sockets

...

Try

    '僅設定伺服端的通訊埠

    Dim tcpListener As New TcpListener(80)

    '僅設定伺服端的IP位址與通訊埠

    Dim srvIP As IPAddress = Dns.Resolve("localhost").AddressList(0)

    Dim tcpListener As New TcpListener(srvIP, 80)

...

Catch ex As ArgumentException


...

End Try

 

Start 方法:

例外錯誤

System.Net.Sockets.SocketException:開啟網路通訊端時發生錯誤。

 

Imports System.Net.Sockets

...

Try

    Dim tcpListener As New TcpListener(80)

    tcpListener.Start()

...

Catch ex As SocketException


...

End Try

 

AcceptSocket 方法:接受用戶端的連線請求,傳回值為 Socket 物件。

例外錯誤

System.Net.Sockets.SocketException:存取 Socket 時發生作業系統錯誤。

System.ObjectDisposedException:Socket 已關閉。

System.InvalidOperationException:在執行 Accept 方法之前須先執行 Bind 與 Listen 方法。

AcceptTcpClient 方法:傳回值為 TcpClient物件,以處理用戶端連線、並傳送和接收資料之用。

例外錯誤

System.Net.Sockets.SocketException:存取 Socket 時發生作業系統錯誤。

System.InvalidOperationException:尚未執行 TcpListener 的 Start 方法。

傳送資料

Write 方法:

WriteByte 方法:

接收資料

Read 方法:

ReadByte 方法:

 

Stop 方法:關閉伺服端服務。

例外錯誤

System.Net.Sockets.SocketException:關閉網路通訊端時發生錯誤。

 

 

Imports System.Net.Sockets

...

Try

    Dim tcpListener As New TcpListener(80)

    tcpListener.Start()

    Dim tcpClient as TcpClient = tcpListener.AcceptTcpClient()

...

    tcpListener.Stop()

...

Catch ex As SocketException


...

End Try

 

arrow
arrow
    全站熱搜

    tsuozoe 發表在 痞客邦 留言(2) 人氣()