● 伺服端應用程式
| System.Net.Sockets.Socket 類別 |
System.Net.Sockets.TcpListener 類別 |
| Socket (IPEndPoint) Bind Listen Accept Receive / ReceiveFrom Send / SendTo (Shutdown) Close |
TcpListener |
<====== 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 |

你好 想要請問一下 我自己要架設個IP 但是 程式執行到執行到一半 他就會自動關閉 但是程式還是在偵錯的狀態 請問 這個現象要怎麼處理呢 這是我的程式碼 可以麻煩看看 是不是有錯誤的 謝謝你 Imports System.Net Imports System.Net.Sockets Imports System.Threading Imports System.Text Public Class Form2 Dim mySocket, mySocket1 As Socket Private clientSocket As System.Net.Sockets.Socket Dim myAcceptSocket, myAcceptSocket1 As Socket Private serverSocket As System.Net.Sockets.Socket Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try Dim serverIP As IPAddress = IPAddress.Parse("172.17.32.211") Dim tcpListener As New TcpListener(serverIP, 781) tcpListener.Start() Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient() tcpListener.Stop() Catch ex As Exception End Try End Sub End Class
Imports System.Net Imports System.Net.Sockets Imports System.Threading Imports System.Text Public Class Form2 Private tcpListener As TcpListener Private tcpClient As TcpClient Private myNetworkStream As NetworkStream Private myProcStatus As Boolean = False '為解決跨執行緒作業無效的問題 Private Delegate Sub UpdateUICallBack(ByVal newText As String, ByVal c As Control) Private Sub UpdateUI(ByVal newText As String, ByVal c As Control) If Me.InvokeRequired() Then Dim cb As New UpdateUICallBack(AddressOf UpdateUI) Me.Invoke(cb, newText, c) Else c.Text = newText End If End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim mythread As New Thread(New ThreadStart(AddressOf StartListen)) mythread.Start() End Sub Private Sub StartListen() Dim serverIP As IPAddress = IPAddress.Parse("172.17.32.211") tcpListener = New TcpListener(serverIP, 781) tcpListener.Start() UpdateUI("等待連線中......", lblMessage) tcpClient = tcpListener.AcceptTcpClient() Do If tcpClient.Connected Then myProcStatus = True UpdateUI(" 連線成功", lblMessage) myNetworkStream = tcpClient.GetStream() If myNetworkStream.CanRead Then '... End If End If Loop End Sub Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click If myProcStatus Then tcpClient.Close() tcpListener.Stop() End If End End Sub End Class
很謝謝你的幫助 那請問一下 我CLIENT端 是要寫在手機上面 然後可以從手機傳文字過去SERVER 那 請問一下要怎麼設定阿 謝謝