2013-02-13 16 views
7

Tôi đang cố gắng thêm ánh xạ cổng tĩnh mới trong ứng dụng C# của tôi. Bởi vì ứng dụng của tôi chạy như một máy chủ và tôi muốn nó nghe trên cổng 8000.Không thể thêm ánh xạ cổng tĩnh trong ứng dụng C#

NATUPNPLib.UPnPNATClass upnpnat = new NATUPNPLib.UPnPNATClass(); 
NATUPNPLib.IStaticPortMappingCollection mappings = upnpnat.StaticPortMappingCollection; 
mappings.Add(8000, "TCP", 8000, "192.168.1.100", true, "Local Web Server"); 

nhưng nó không hoạt động !, Trường hợp ngoại lệ là như sau:

Đối tượng tham chiếu không được đặt để một thể hiện của một đối tượng.

Có ai có thể giúp tôi không?

Đây là những gì tôi đang làm: http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-via-UPnP.aspx

+0

'là gì mappings'? Bạn đã khởi tạo nó chưa? Đặt mã đầy đủ của bạn ở đây .. –

+0

Sẽ là một ý tưởng hay để đăng thêm mã. Ví dụ, kiểu đối tượng là ánh xạ. –

+0

@MuhamadSerawan Dán mã của bạn vào câu hỏi của bạn. Không phải là một bình luận .. –

Trả lời

3

Bạn cần phải thiết lập ánh xạ đến một trường hợp mới:

Ví dụ:

var mappings = new List<Mapping>(); 

Sau đó, bạn có thể gọi:

mappings.Add(8000, "TCP", 8000, "192.168.1.100", true, "Local Web Server"); 

Từ chỉnh sửa của bạn:

upnpnat.StaticPortMappingCollection; // this is your problem. 

Bộ sưu tập sẽ trở lại dưới dạng rỗng. Do đó bạn không thể thêm vào bộ sưu tập.

Bạn có thể phải làm:

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection(); 

Từ bình luận Codesleuth của:

Tôi tin rằng câu trả lời là router của mình không được cấu hình như một cổng UPnP, hoặc hắn chỉ còn không có quyền. Các StaticPortMappingCollection là null nếu một trong những trường hợp là đúng sự thật. Tôi đề nghị bạn chỉnh sửa điều này vào câu trả lời của bạn vì bạn đã có lý do chính đáng cho lỗi anyway. Việc kiểm tra null trước tiên là cách duy nhất để xử lý lỗi này

+0

@Muhammed - kiểm tra chỉnh sửa của tôi –

+0

Thực ra, có vẻ như mã của anh ấy sẽ hoạt động. [Xem bài viết này] (http://www.codeproject.com/Articles/110338/UpnpStat-List-and-Modify-Port-Mappings-on-your-UPn) – Codesleuth

+0

@Codesleuth - nó có lẽ nên nhưng lỗi chỉ ra rằng bộ sưu tập không có cá thể. –

1

Nếu không có thêm mã, chúng tôi có thể giúp, nhưng nếu ngoại lệ trên dòng bạn cung cấp, điều đó có nghĩa là mappings là không và không được đặt.

Kiểm tra mã trước dòng đó để xem bạn có thực sự tạo và đặt biến số mappings hay không.

Theo nhận xét của bạn, đối tượng được trả về bởi upnpnat.StaticPortMappingCollection là giá trị rỗng. Kiểm tra tài liệu để đảm bảo bạn đang khởi tạo đúng tài liệu.

1

Chỉ dựa trên thông báo lỗi mà tất cả chúng ta có;

var mappings = new List<Mapping>(); 
mappings.Add(8000, "TCP", 8000, "192.168.1.100", true, "Local Web Server"); 

Sau khi chỉnh sửa, có thể sử dụng như;

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection(); 

Hình như bạn quên sử dụng ()

+0

Điều đó không khắc phục được sự cố. – Matth3w

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