Danh mục

Lập trình Mạng Microsoft .NET Framework phần 3

Số trang: 9      Loại file: pdf      Dung lượng: 160.15 KB      Lượt xem: 14      Lượt tải: 0    
10.10.2023

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Đoạn mã dưới đây là một khuôn dạng cho một TCP-client cơ bản. Nó tiếp xúc với server tại địa chỉ IP và port được chỉ định. Trong ví dụ này, địa chỉ loopback (127.0.0.1—chỉ đến máy tính hiện hành) được sử dụng. Nhớ rằng kết nối TCP yêu cần hai port: một tại server và một tại client.
Nội dung trích xuất từ tài liệu:
Lập trình Mạng Microsoft .NET Framework phần 3Đoạn mã dưới đây là một khuôn dạng cho một TCP-client cơ bản. Nó tiếp xúc với servertại địa chỉ IP và port được chỉ định. Trong ví dụ này, địa chỉ loopback (127.0.0.1—chỉđến máy tính hiện hành) được sử dụng. Nhớ rằng kết nối TCP yêu cần hai port: một tạiserver và một tại client. Tuy nhiên, chỉ cần chỉ định port tại server, còn port tại client cóthể được chọn động lúc thực thi từ các port có sẵn.using System;using System.Net;using System.Net.Sockets;using System.IO;using SharedComponent;public class TcpClientTest { private static void Main() { TcpClient client = new TcpClient(); try { Console.WriteLine(Attempting to connect to the server + on port 8000.); client.Connect(IPAddress.Parse(127.0.0.1), 8000); Console.WriteLine(Connection established.); // Thu lấy network stream. NetworkStream stream = client.GetStream(); // Tạo BinaryWriter để ghi ra stream. BinaryWriter w = new BinaryWriter(stream); // Tạo BinaryReader để đọc từ stream. BinaryReader r = new BinaryReader(stream); w.Write(ClientMessages.RequestConnect); if (r.ReadString() == ServerMessages.AcknowledgeOK) { Console.WriteLine(Connected.); Console.WriteLine(Press Enter to disconnect.); Console.ReadLine(); Console.WriteLine(Disconnecting...); w.Write(ClientMessages.Disconnect); } else { Console.WriteLine(Connection not completed.); } // Đóng connection socket. client.Close(); Console.WriteLine(Port closed.); } catch (Exception err) { Console.WriteLine(err.ToString()); } Console.ReadLine(); }}Dưới đây là transcript phía server:About to initialize port.Listening for a connection...Connection accepted.Connection completed.Disconnect request received.Connection closed.Listener stopped.Và dưới đây là transcript phía client:Attempting to connect to the server on port 8000.Connection established.Connected.Press Enter to disconnect.Disconnecting...Port closed. 1.1 Lấy địa chỉ IP của client từ kết nối socket Ứng dụng server cần xác định địa chỉ IP của client sau khi nó chấp nhận một kết nối. Sử dụng phương thức AcceptSocket của lớp TcpListener để lấy lớp mức-thấp là System.Net.Sockets.Socket thay vì là TcpClient. Sử dụng thuộc tính Socket.RemoteEndPoint để lấy địa chỉ IP của client.Lớp TcpClient không cho phép bạn thu lấy socket nằm dưới hay bất cứ thông tin nào vềport và địa chỉ IP của client. Lớp này có cung cấp thuộc tính Socket, nhưng thuộc tínhnày là được-bảo-vệ (protected) và do đó không thể truy xuất được từ các lớp phi dẫnxuất. Để truy xuất socket nằm dưới, bạn có hai tùy chọn: • Tạo một lớp tùy biến dẫn xuất từ TcpClient. Lớp này có thể truy xuất thuộc tính được-bảo-vệ Socket và trưng nó ra thông qua một thuộc tính mới. Sau đó, bạn phải sử dụng lớp tùy biến này thay cho TcpClient. • Bỏ qua lớp TcpClient bằng cách sử dụng phương thức TcpListener.AcceptSocket. Bạn vẫn có thể sử dụng các lớp mức-cao là BinaryReader và BinaryWriter để đọc/ghi dữ liệu, nhưng bạn cần phải tạo NetworkStream trước (sử dụng socket).Mục này sử dụng cách thứ hai. Dưới đây là phiên bản sửa đổi của server trong mục 11.8:using System;using System.Net;using System.Net.Sockets;using System.IO;using SharedComponent;public class TcpServerTest { private static void Main() { // Tạo listener trên port 8000. TcpListener listener = new TcpListener(IPAddress.Parse(127.0.0.1), 8000); Console.WriteLine(About to initialize port.); listener.Start(); Console.WriteLine(Listening for a connection...); try { // Đợi yêu cầu kết nối, và trả về một Socket. Socket socket = listener.AcceptSocket(); Console.WriteLine(Connection accepted.); // Tạo network stream. NetworkStream stream = new NetworkStream(socket); // Tạo BinaryWriter để ghi ra stream. BinaryWriter w = new BinaryWriter(stream); // Tạo BinaryReader để đọc từ stream. BinaryReader r = new BinaryReader(stream); if (r.ReadString() == ClientMessages.RequestConnect) { w.Write(ServerMessages.AcknowledgeOK); Console.WriteLine(Connection completed.); // Lấy địa chỉ IP của client. Console.WriteLine(The client is from IP address: + ((IPEndPoint)socket.RemoteEndPoint).Address.ToString()); Console.Write(The client uses local port: + ((IPEndPoint)socket.RemoteEndPoint).Port.ToString()); while (r.ReadString() != ClientMessages.Disconnect) {} Console.WriteLine(); Console.WriteLine(Disconnect request received.); w.Write(ServerMessages.Disconnect); } else { Console.WriteLine(Could not complete connection.); } // Đóng socket. socket.Close(); Console.WriteLine(Connection closed.); // Đóng socket nằm dưới (ngừng lắng nghe yêu cầu mới). listener.Stop(); Console.WriteLine(Listener stopped.);} catch (Exception err) { Console.WriteLine(err.ToString()); } Console.ReadLine(); }} 1.2 Thiết lập các tùy chọn socket Bạn cần thiết lập các tùy chọn socket mức-thấp, chẳng hạn các tùy chọn cho biết send timeout và receive timeout. Sử dụng phương thức Socket.SetSocketOption. Bạn có thể thiết lập các thuộc tính của socket được sử dụng để lắng nghe các yêu cầu hoặc các thuộc tính của socket được sử dụng cho một phiên client cụ thể.Bạn có thể sử dụng phương thức Socket.SetSocketOption để thiết lập một số thuộc tínhsocket mức-thấp. Khi gọi phương thức này, bạn cần cung cấp ba đối số sau đây: • Một giá trị thuộc kiểu liệt kê SocketOptionLevel, cho biết kiểu socket mà thiết lập này sẽ áp dụng ...

Tài liệu được xem nhiều: