Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 96 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
96
Dung lượng
694,46 KB
Nội dung
CHƯƠNG SOCKETS ThS Trần Bá Nhiệm Website: sites.google.com/site/tranbanhiem Email: tranbanhiem@gmail.com Nội dung • Giới thiệu • Khảo sát chức lớp Socket, UDP, TCP (TCPClient & TCPListener) lớp IPAddress, IPHostEntry, IPEndpoint lập trình mạng • Khai báo sử dụng lớp UDP, TCP 1/19/22 Chương 3: Sockets Socket gì? • Lập trình mức socket tảng lập trình mạng • Socket đối tượng thể điểm truy cập mức thấp vào IP stack • Socket chế độ mở, đóng số trạng thái trung gian khác • Socket gửi, nhận liệu • Dữ liệu tổng quát gửi theo khối (thường gọi packet), khoảng vài KB/lần để tăng hiệu suất 1/19/22 Chương 3: Sockets Khái niệm địa cổng (Address & Port) 1/19/22 Chương 3: Sockets Địa cổng: nguyên lý • Trong máy có nhiều ứng dụng muốn trao đổi với ứng dụng khác thơng qua mạng – Ví dụ: có ứng dụng máy A muốn trao đổi với với ứng dụng máy B • Mỗi máy tính có đường truyền liệu (để gửi nhận) 1/19/22 Chương 3: Sockets Địa cổng: vấn đề • Có thể xảy "nhầm lẫn" liệu từ máy A gửi đến máy B máy B khơng biết liệu gửi cho ứng dụng nào? • Mỗi ứng dụng máy B gán số hiệu (cổng: Port), từ 65535 1/19/22 Chương 3: Sockets Địa cổng: cách giải • Khi ứng dụng máy A muốn gửi cho ứng dụng máy B việc điền thêm số hiệu cổng (vào trường RemotePort) vào gói tin cần gửi • Trên máy B, ứng dụng việc kiểm tra giá trị cổng gói tin xem có trùng với số hiệu cổng (đã gán – giá trị LocalPort) hay khơng? Nếu xử lý, trái lại khơng làm (vì khơng phải mình) 1/19/22 Chương 3: Sockets Ứng dụng cổng thường gặp Port 20 21 25 53 80 110 143 1/19/22 Protocol FTP data FTP control SMTP (email, outgoing) DNS (Domain Name Service) HTTP (Web) POP3 (email, incoming) IMAP (email, incoming) Chương 3: Sockets Một số quy định • Khơng có ứng dụng lại dùng port • Các port từ – 1023 (Well-know): dùng cho ứng dụng quan trọng hệ điều hành • Các port từ 1024 – 49151 (Registered): dành cho người lập trình (khuyến cáo tuân theo) • Các port từ 49152 – 65535 (Dynamic): dự trữ 1/19/22 Chương 3: Sockets Lớp IPAddress • Trên Internet trạm (có thể máy tính, máy in, thiết bị …) có định danh nhất, định danh thường gọi địa (Address) • Địa Internet tập hợp gồm số có giá trị từ 0-255 cách dấu chấm 1/19/22 Chương 3: Sockets 10 Lớp TCPListener • TCPListerner lớp cho phép người lập trình xây dựng ứng dụng Server (Ví dụ: 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ỗ ln thực lắng nghe chấp nhận kết nối đến từ Client 1/19/22 Chương 3: Sockets 82 Lớp TCPClient: thành viên Tên phương thức Mô tả TcpListener (Port: In Tạo TcpListener lắng nghe cổng t32) định TcpListener (IPEndPoTạo TcpListener với giá trị Endpoint int) truyền vào TcpListener (IPAddre Tạo TcpListener lắng nghe kết nối ss, Port: Int32) đến địa IP cổng định Active Trả giá trị cho biết TcpListener lắng nghe kết nối từ client Kiểu bool Server Trả socket 1/19/22 Chương 3: Sockets 83 Lớp TCPClient: thành viên Tên phương thức Mô tả AcceptSocket Chấp nhận yêu cầu kết nối chờ AcceptTcpClient Start Chấp nhận yêu cầu kết nối chờ (Ứng dụng dừng lệnh có kết nối đến) Cho biết liệu có kết nối chờ đợi khơng? (True = có) Bắt đầu lắng nghe yêu cầu kết nối Stop Dừng việc nghe Pending 1/19/22 Chương 3: Sockets 84 Lớp TCPClient: ví dụ xây dựng ứ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 = Sub Xử_Lý_Kết_Nối() Dim LastClient As Integer = CurrClient - Dim Con As TcpClient = Clients(LastClient) Dim Doc As New StreamReader(Con.GetStream) Dim Ghi As New StreamWriter(Con.GetStream) Dim S As String 1/19/22 Chương 3: Sockets 85 Lớp TCPClient: ví dụ xây dựng ứng dụng Server đơn giản While Thoat = False Application.DoEvents() If Doc.EndOfStream = False Then S = Doc.ReadLine '// Xử lý đây: S = S.ToUpper Ghi.WriteLine(S) '//Gửi lại Client Ghi.Flush() End If End While End Sub 1/19/22 Chương 3: Sockets 86 Lớp TCPClient: ví dụ xây dựng ứng dụng Server đơn giản Sub Nghe_Kết_Nối() Do While Thoat = False Clients(CurrClient) = TCPServer.AcceptTcpClient() CurrClient += '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 1/19/22 Chương 3: Sockets 87 Lớp TCPClient: ví dụ xây dựng ứng dụng Server đơn giản 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 1/19/22 Chương 3: Sockets 88 Dùng TCP/IP để truyền file • Để đọc file, tạo stream tương ứng • Đọc nội dung file vào buffer array • Gửi buffer array đường truyền Stream fileStream = File.OpenRead(tbFilename.Text); // Alocate memory space for the file byte[] fileBuffer = new byte[fileStream.Length]; fileStream.Read(fileBuffer, 0, (int)fileStream.Length); // Open a TCP/IP Connection and send the data TcpClient clientSocket = new TcpClient(tbServer.Text,8080); NetworkStream networkStream = clientSocket.GetStream(); networkStream.Write(fileBuffer,0,fileBuffer.GetLength(0)); networkStream.Close(); 1/19/22 Chương 3: Sockets 89 Debugging network code • Debugging phương pháp quan trọng để theo dõi giải lỗi phát sinh viết chương trình • Nên dùng cấu trúc try/catch try { serverSocket.Bind(ipepServer); serverSocket.Listen(-1); } catch(SocketException e) { MessageBox.Show(e.Message); } 1/19/22 Chương 3: Sockets 90 Debugging network code • Để xác định trục trặc ứng dụng multithreaded, chế theo vết (tracing) đóng vai trị quan trọng • Nên dùng System.Diagnostics.Trace • Hoặc phát biểu dạng Console.WriteLine 1/19/22 Chương 3: Sockets 91 Bài tập Viết chương trình UDP đặt hai máy thực công việc sau: Khi ứng dụng gửi chuỗi "OPEN#" ứng dụng máy mở file nằm phần Khi ứng dụng gửi chuỗi "SHUTDOWN" ứng dụng tắt máy tính 1/19/22 Chương 3: Sockets 92 Bài tập Viết chương trình UDP (ứng dụng A) đặt máy thực công việc sau: Khi ứng dụng (B) gửi chuỗi chữ tiếng Anh ứng dụng A gửi trả lại nghĩa tiếng Việt tương ứng Nếu từ tiếng Anh khơng có từ điển (từ điển có từ Computer, RAM, HDD) ứng dụng A gửi trả lại chuỗi "Not found" 1/19/22 Chương 3: Sockets 93 Bài tập Viết chương trình SMTP server Viết chương trình client/server đó, client di chuyển chuột server di chuyển chuột theo (dựng hàm API SetCursorPos…) người Viết chương trình Client/Server: Khi client gửi chuỗi "shutdown", "restart" Server tắt máy khởi động tương ứng (dựng hàm API ExitWindow…) người 1/19/22 Chương 3: Sockets 94 Bài tập Viết chương trình kiểm tra xem máy 192.168.1.1 có dịch vụ FTP chạy hay khơng? – người Viết chương trình kiểm tra xem máy "Servercntt" có dịch vụ FTP chạy hay khơng? – đề tài 6, gộp chung lại, cho nhóm người Viết chương trình Telnet linh hoạt (có thể thay đổi tên máy, cổng…) – người Viết chương trình Server giải đáp tên miền Nếu máy khách gửi tên máy server gửi địa IP (danh sách tự tạo – khoảng cặp để minh họa) 1/19/22 Chương 3: Sockets 95 Bài tập 10.Viết chương trình Client/Server Khi Client gửi đường dẫn tập tin nằm máy server server gửi trả cho Client nội dung tập tin người 11.Cài đặt chương trình minh họa giảng chương ngôn ngữ C# VB.NET 1/19/22 Chương 3: Sockets 96 ... Chương 3: Sockets 45 Lớp UDPClient: chương trình chat 1/19/22 Chương 3: Sockets 46 Lớp UDPClient: chương trình chat 1/19/22 Chương 3: Sockets 47 Lớp UDPClient: chương trình chat 1/19/22 Chương 3: Sockets. .. Dns.GetHostEntry("127.0.0.1"); iphe3 = Dns.GetHostEntry(ipadd); MessageBox.Show(iphe1.HostName); MessageBox.Show(iphe2.HostName) ; MessageBox.Show(iphe3.HostName) ; } 1/19/22 Chương 3: Sockets 33 Lớp UDPClient... quảng bá (Broadcast) cho đồng thời nhiều máy 1/19/22 Chương 3: Sockets 34 Lớp UDPClient: trình tự kết nối 1/19/22 Chương 3: Sockets 35 Lớp UDPClient: thành viên Tên phương thức, Mơ tả thuộc tính