CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 457

457

Chương 11: Lập trình mạng

9.

9.

L y đ a ch IP c a client t k t n i socket

ấ ị

ừ ế ố

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ính này là

được-bảo-vệ (

protected

) và do đó không thể truy xuất được từ các lớp phi dẫn xuấ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

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 {

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.