Lớp TCPListener
TCPListerner là một lớp cho phép người lập trình có thể xây dựng các ứng dụng Server (Ví dụ như SMTP Server, FTP Server, DNS Server, POP3 Server hay server tự định nghĩa ….). Ứng dụng server khác với ứng dụng Client ở chỗ nó luôn luôn ...
TCPListerner là một lớp cho phép người lập trình có thể xây dựng các ứng dụng Server (Ví dụ như SMTP Server, FTP Server, DNS Server, POP3 Server hay server tự định nghĩa ….). Ứng dụng server khác với ứng dụng Client ở chỗ nó luôn luôn thực hiện lắng nghe và chấp nhận các kết nối đến từ Client.
Constructor method | |
Name | Description |
TcpListe ner (Port: Int32) | Tạo một TcpListener và lắng nghe tại cổng chỉ định. |
TcpListener (IPEndPoint) | Tạo một TcpListener với giá trị Endpoint truyền vào. |
TcpListener (IPAddress, Port: Int32) | Tạo một TcpListener và lắng nghe các kết nối đến tại địa chỉ IP và cổng chỉ định. |
Public Methods (see also Protected Methods )
Name | Description | |
![]() ![]() |
AcceptSocket | Chấp nhận một yêu cầu kết nối đang chờ. |
![]() ![]() |
AcceptTcpClient | Chấp nhận một yêu cầu kết nối đang chờ. (Ứng dụng sẽ dừng tại lệnh này cho đến khi nào có một kết nối đến – “Blocking”) |
![]() ![]() |
Pending | Cho biết liệu có kết nối nào đang chờ đợi không ? (True = có). |
![]() ![]() |
Start | Bắt đầu lắng nghe các yêu cầu kết nối. |
![]() ![]() |
Stop | Dừng việc nghe. |
Khi AcceptTcpCLient, thêng t¹o riªng mét Client ®Ó giao tiÕp víi client võa ®îc Accept
Tạo một server trong đó, khi có một client kết nối đến thì server chuyển xâu đó thành chữ HOA và gửi trả lại cho Client.
Listing 3: Xây dựng một ứng dụng Server đơn giản
Imports System.Net.Sockets
Imports System.Net
Imports System.IO
Imports System.Threading
Public Class frmServer
Dim TCPServer As New System.Net.Sockets.TcpListener(21)
Dim Thoat As Boolean = False
Dim Clients(100) As TcpClient
Dim CurrClient As Integer = 0
-------------------------------------------------------------------------------------------------------------------------
Sub Xử_Lý_Kết_Nối()
Dim LastClient As Integer = CurrClient - 1
Dim Con As TcpClient = Clients(LastClient)
Dim Doc As New StreamReader(Con.GetStream)
Dim Ghi As New StreamWriter(Con.GetStream)
Dim S As String
While Thoat = False
Application.DoEvents()
If Doc.EndOfStream = False Then
S = Doc.ReadLine
'MsgBox("Client đã gửi xâu: " & S)
'// Xử lý tại đây: (Ví dụ chuyển thành chữ HOA)
S = S.ToUpper
Ghi.WriteLine(S) '//Gửi lại cho Client...
Ghi.Flush()
End If
End While
End Sub
-------------------------------------------------------------------------------------------------------------------------
Sub Nghe_Kết_Nối()
Do While Thoat = False
Clients(CurrClient) = TCPServer.AcceptTcpClient()
CurrClient += 1
'MsgBox("Đã có " & (CurrClient + 1) & " kết nối !")
Dim Th As New Thread(AddressOf Xử_Lý_Kết_Nối)
Th.Start()
Loop
End Sub
-------------------------------------------------------------------------------------------------------------------------
Private Sub frmClose(ByVal s As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
Thoat = True
End Sub
-------------------------------------------------------------------------------------------------------------------------
Private Sub Form1_Load(ByVal s As Object, ByVal e As EventArgs) Handles Me.Load
TCPServer.Start()
Nghe_Kết_Nối()
End Sub
End Class
Lưu ý: Vì phương thức AcceptTCPClient() luôn bị khóa (blocking) cho đến khi nào có một kết nối đến. Do vậy, để ứng dụng có thể thoát bình thường, ta nên thêm lệnh sau vào trước dòng Clients(CurrClient) = TCPServer.AcceptTcpClient():
If TCPServer.Pending = False Then Continue Do
Tức là ta chỉ AcceptTcpClient() khi có kết nối đến !