1. Trang chủ
  2. » Công Nghệ Thông Tin

Lớp TCP

7 200 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 150,7 KB

Nội dung

Lớp TCP Lớp TCP Bởi: Khoa CNTT ĐHSP KT Hưng Yên Giới thiệu Mục đích lớp UDPClient dùng cho lập trình với giao thức UDP, với giao thức hai bên không cần phải thiết lập kết nối trước gửi mức độ tin cậy không cao Để đảm bảo độ tin cậy ứng dụng mạng, người ta dùng giao thức khác, gọi giao thức có kết nối : TCP (Transport Control Protocol) Trên Internet chủ yếu dùng loại giao thức này, ví dụ Telnet, HTTP, SMTP, POP3… Để lập trình theo giao thức TCP, MS.NET cung cấp hai lớp có tên TCPClient TCPListener Các thành viên lớp TCPClient Constructor Method Name Description TcpClient () Tạo đối tượng TcpClient Chưa đặt thông số TcpClient (IPEndPoint) Tạo TcpClient gắn cho EndPoint cục (Gán địa máy cục số hiệu cổng để sử dụng trao đổi thông tin sau) TcpClient (RemoteHost: String, RemotePort: Int32) [link] Tạo đối tượng TcpClient kết nối đến máy có địa số hiệu cổng truyền vào RemoteHost địa IP chuẩn tên máy Public Properties (see also Protected Properties ) Name Description Available Cho biết số byte nhận từ mạng có sẵn để đọc Client Trả Socket ứng với TCPClient hành 1/7 Lớp TCP Connected Trạng thái cho biết kết nối đến Server hay chưa ? Public Methods (see also Protected Methods ) Name Description Close Giải phóng đối tượng TcpClient không đóng kết nối Connect (RemoteHost, Kết nối đến máy TCP khác có Tên số hiệu cổng RemotePort) GetStream Trả NetworkStream để từ giúp ta gửi hay nhận liệu (Thường làm tham số tạo StreamReader StreamWriter để gửi nhận liệu dạng xâu ký tự) re6Khi gắn vào StreamReader StreamWriter ta gửi nhận liệu thông qua phương thức Readline, writeline tương ứng lớp Từ thành viên lớp TCPClient ta thấy rằng, việc kết nối thực gửi nhận đơn giản Theo trình tự sau: B1: Tạo đối tượng TCPClient B2: Kết nối đến máy chủ (Server) dùng phương thức Connect B3: Tạo đối tượng StreamReader (Receive)và StreamWriter (Send) "nối" với GetStream TCPClient B4: - Dùng đối tượng StreamWriter.Writeline/write vừa tạo để gửi liệu - Dùng đối tượng StreamReader.Readline/Read vừa tạo để đọc liệu B5: Đóng kết nối *** Nếu muốn gửi/nhận liệu mức byte (nhị phân) dùng NetworkStream (truyền GetStream cho NetworkStream) Ví dụ Tạo TCP Client kết nối đến server (FTP Server-listen on 21 port), sau gửi xâu 2/7 Lớp TCP Imports System.Net.Sockets Imports System.Net Imports System.IO Public Class Form1 '/// Tạo địa ứng với 127.0.0.1 (Có thể sử dụng nhiều cách đề cập) Dim DiaChi As Long = * 256 ^ + 127 * 256 ^ '//= 127.0.0.1 '// Tạo IPEndPoint từ địa IP cổng (Vì TCPClient cần IPEndPoint) Dim LocalEP As New IPEndPoint(DiaChi, 100) '// cho cục (client) '/// Tạo đối tượng TCP ứng với địa cổng Dim tcp As New TcpClient(LocalEP) '/// Hai luồng nhập xuất dùng để đọc/ghi vào kết nối TCP Dim Ghi As StreamWriter Dim Doc As StreamReader Private Sub Form1_Load(…) tcp.Connect("localhost", 21) ‘//Kết nối đến máy chủ FTP 'MsgBox(tcp.Connected) '/// Nối Doc = New StreamReader(tcp.GetStream()) Ghi = New StreamWriter(tcp.GetStream()) '/// Gửi thử xâu (tên đăng nhập) cho server (FTP Server) Ghi.Writeline("User quynm") Ghi.Flush() 3/7 Lớp TCP '/// Đọc liệu Server gửi Dim S As String S = Doc.ReadLine() MsgBox("Dữ liệu gửi từ server : " & S) End Sub Private Sub Gui_Du_Lieu(ByVal Data As String) Ghi.WriteLine(Data) Ghi.Flush() End Sub End Class Ở ví dụ ta thấy việc gửi thực nhiều lần với việc gọi nhiều lần phương thức Gửi_Dữ_Liệu Tuy nhiên, việc nhận liệu ta thực lần Trong trường hợp ta muốn nhận liệu có liệu cần áp dụng kỹ thuật "Thăm dò" "kích hoạt kiện" phần UDPClient Ý tưởng thực sau: B1 : Tạo TCPClient B2 : Kết nối B3 : Tạo luồng mới, luồng "chuyên theo dõi" xem có liệu hay không (chỉ việc kiểm tra đệm (đối tượng StreamReader.EndOfStream = True/False) Nếu đệm không rỗng (có liệu mới) giá trị EndOfStream False Khi có liệu đệm ta kích hoạt (Raise) kiện Có_Dữ_Liệu lên Trong kiện ta viết lệnh xử lý Listing : Viết chương trình Telnet Imports System.Net.Sockets Imports System.Net Imports System.IO 4/7 Lớp TCP Imports System.Threading Public Class frmTelnet '/// Tạo đối tượng TCPClient Dim tcp As New TcpClient() '/// Hai luồng nhập xuất dùng để ghi vào kết nối TCP Dim Ghi As StreamWriter Dim Doc As StreamReader '/// Tạo thread chuyên thăm dò liệu Dim Th As Thread '/// Cờ báo hiệu thoát Để tránh việc lặp vô hạn Dim Thoat As Boolean = False Public Event Dữ_Liệu_Về(ByVal Data As String) Sub Thăm_Dò() Dim S As String Do While Thoat = False Application.DoEvents() If Doc.EndOfStream = False Then S = Doc.ReadLine RaiseEvent Dữ_Liệu_Về(S) End If Loop End Sub 5/7 Lớp TCP Private Sub frmTelnet_Dữ_Liệu_Về(ByVal Data As String) Handles Me.Dữ_Liệu_Về lstreceived.Items.Insert(0, Data) End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim RPort As Long = Integer.Parse(txtRemotePort.Text) Dim IpEnd As New IPEndPoint(IPAddress.Parse(txtRemoteHost.Text), RPort) '/// Kết nối tới máy chủ tcp.Connect(IpEnd) Doc = New StreamReader(tcp.GetStream()) Ghi = New StreamWriter(tcp.GetStream()) Th = New Thread(AddressOf Thăm_Dò) Th.Start() End Sub Private Sub cmdSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSend.Click Gui_Du_Lieu(txtMsg.Text) End Sub Private Sub frmTelnet_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Thoat = True End Sub Private Sub Gui_Du_Lieu(ByVal Data As String) Ghi.WriteLine(Data) 6/7 Lớp TCP Ghi.Flush() lstSent.Items.Insert(0, txtMsg.Text) End Sub End Class Giao diện: Ghi chú: Nếu muốn đọc hay ghi liệu dạng chuỗi byte khai báo Doc, Ghi AsNetworkStream Bài tập: Viết ứng dụng chơi cờ Caro / Cờ tướng (Hay cờ khác !!!) qua mạng (Sử dụng giao thức UDP) Gợi ý: người dùng gửi vị trí ô vừa cho ứng dụng (đối phương) 7/7 ... Imports System.IO 4/7 Lớp TCP Imports System.Threading Public Class frmTelnet '/// Tạo đối tượng TCPClient Dim tcp As New TcpClient() '/// Hai luồng nhập xuất dùng để ghi vào kết nối TCP Dim Ghi As... IPEndPoint từ địa IP cổng (Vì TCPClient cần IPEndPoint) Dim LocalEP As New IPEndPoint(DiaChi, 100) '// cho cục (client) '/// Tạo đối tượng TCP ứng với địa cổng Dim tcp As New TcpClient(LocalEP) '///... nối TCP Dim Ghi As StreamWriter Dim Doc As StreamReader Private Sub Form1_Load(…) tcp. Connect("localhost", 21) ‘//Kết nối đến máy chủ FTP 'MsgBox (tcp. Connected) '/// Nối Doc = New StreamReader (tcp. GetStream())

Ngày đăng: 31/12/2015, 10:50

Xem thêm

TỪ KHÓA LIÊN QUAN

w