2009-02-03 40 views
7

Chúng tôi có một phần mềm kế thừa đơn giản mà chúng tôi cần giao tiếp bằng TCP/IP qua cổng 15001. Chúng tôi cần lắng nghe trên cổng 15001 cho phần mềm cũ tạo một kết nối và sau đó đọc bất cứ điều gì nó gửi cho chúng tôi.TcpListener: Nghe trên mọi địa chỉ, bao gồm địa chỉ IP GPRS

Chúng tôi đã thử nghiệm giải pháp này trên internet và nó hoạt động tốt. Tuy nhiên, nếu chúng tôi kiểm tra cùng một giải pháp trên mạng GPRS TCP/IP thì không.

Tất cả các khái niệm cơ bản đã được kiểm tra, chúng tôi có thể ping các thiết bị khác trong mạng GPRS và cổng 15001 không bị chặn bởi bất kỳ tường lửa nào.

Vì vậy, có thể có sự cố với TcpListener của tôi?

Nó được khởi tạo như thế này:

tcpServer = new TcpListener(IPAddress.Any, TCP_PORT); 

Tôi giả định nó lắng nghe trên mỗi giao diện có sẵn cho phép IPv4 trên hệ thống, vì tôi sử dụng IPAddress.Any?

Có ai có ý kiến ​​gì về sự khác biệt giữa hai mạng không? (Mặc dù không có bất kỳ sự khác biệt nào) và nếu có điều gì đó tôi cần phải thay đổi thành TcpListener của tôi?

Trả lời

9

Bạn cần chỉ định địa chỉ IP mà bạn muốn nghe, thay vì IPAddress.Any. Xem here. Khi bạn sử dụng IPAddress.Any, nó sẽ tự động chọn giao diện mạng cho bạn. Để nghe trên một giao diện nhất định (trong trường hợp của bạn, GPRS), bạn phải sử dụng đúng IP trong hàm tạo.

This post có thêm thông tin về cách nhận địa chỉ IP cho mỗi nic.

Ngoài ra, nếu bạn đang tìm kiếm để nghe trên mọi địa chỉ IP cùng một lúc, bạn sẽ cần một TcpListener cho mỗi nic.

+0

Thú vị rằng mã thử nghiệm được biên dịch/chạy dưới Mono, nó bắt đầu nghe trên 0.0.0.0 nếu IPAddress.Any được truyền cho hàm tạo. –

+0

Đang sử dụng IPAddress.Any tương tự như sử dụng các nhà xây dựng TcpListener (int Port) mà không được chấp nhận? –

Các vấn đề liên quan