cuốn sách gpt4 ai đã làm

c# - 没有中央服务器的 P2P 握手

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 19:08:18 28 4
mua khóa gpt4 Nike

Tôi đã viết một ứng dụng máy khách-máy chủ được thiết kế để trao đổi tệp (trong số những thứ khác) qua mạng LAN. Ở chế độ máy chủ, ứng dụng sẽ lắng nghe các kết nối TCP với tiêu đề nhận dạng cụ thể. Ở chế độ máy khách, nó cố gắng thiết lập kết nối TCP tới địa chỉ IP do người dùng cung cấp.

Bây giờ tôi cần điều chỉnh ứng dụng này để hoạt động trên Internet. Không có nhiều kiến ​​thức về lập trình mạng, tôi không chắc cách triển khai điều này mà không có một số loại máy chủ trung tâm (để thông báo sự hiện diện, v.v.). Đây không phải là một lựa chọn.

Giả sử ứng dụng của tôi đang chạy ở chế độ máy chủ trên một máy phía sau mạng gia đình của tôi. Ứng dụng (trình đọc) của bạn đang ở chế độ máy khách và chúng tôi cần kết nối. Không ai trong chúng tôi có địa chỉ IP tĩnh. Có cách nào để máy khách tiếp cận máy chủ không? Cả máy chủ và máy khách đều có thể tìm ra địa chỉ IP công cộng của mình, nhưng ngoài ra tôi không biết phải làm gì.

Bất kỳ hướng dẫn sẽ được đánh giá rất cao.

biên tập: Dựa trên câu trả lời, cần phải làm rõ một số điều. Câu hỏi của tôi không phải là về sự khám phá. Cả máy khách và máy chủ đều có thể truy vấn địa chỉ công cộng của chúng và người dùng có thể trao đổi các IP này thông qua các phương tiện khác. Vấn đề là làm thế nào để thiết lập kết nối khi IP của bên kia được biết nhưng cả hai bên đều ở phía sau mạng mà không có chuyển tiếp cổng thích hợp. Ví dụ: ứng dụng của tôi sử dụng cổng 51200 làm mặc định trên TCP.

câu trả lời hay nhất

Tôi hiểu rằng kỹ thuật đục lỗ UDP để có được kết nối trực tiếp thực sự giữa 2 thiết bị ngang hàng là không hoàn hảo do có thể có một số kết hợp nhất định của các loại NAT có liên quan. Điều này có nghĩa là đục lỗ UDPmột mìnhKhông phải lúc nào cũng hoạt động.

Phương pháp khẳng định khả năng hoạt động 100% là sử dụng máy chủ chuyển tiếp trong các tình huống không thể kết nối p2p. Quá trình khám phá xem có thể kết nối p2p thực sự hay không đã được chuẩn hóa bởi ICE, TURN và STUN. Tất cả những gì tôi biết là việc sử dụng ICE/TURN/STUN dường như là chiến lược tiêu chuẩn hóa để giải quyết các vấn đề NAT. Nó tạo điều kiện thuận lợi cho các kết nối p2p thực sự khi có sẵn và cung cấp các dịch vụ chuyển tiếp khi cần thiết.

Để ý:Tôi sử dụng thuật ngữ p2p trong câu trả lời này để phân biệt kết nối trực tiếp thực sự giữa 2 điểm cuối, không bị nhầm lẫn với mạng lớp phủ, v.v.

người dùng nâng cao: Bằng cách giới thiệu các chiến lược phức tạp hơn để hợp tác với hành vi NAT đối xứng, chẳng hạn như dự đoán cổng, v.v., có thể thu được nhiều kết nối p2p trực tiếp hơn. Nhưng các thư viện triển khai những phương pháp này rất tốn kém và dường như quá khó đối với công việc DIY.

Tôi không giải thích chi tiết các loại khả năng kết nối NAT khác nhau. Bạn sẽ muốn nghiên cứu các loại NAT và cách chúng liên quan đến việc đục lỗ UDP. Có RFC ở đó, tôi sẽ cố gắng cập nhật câu trả lời của mình bằng một liên kết. Nhưng vấn đề là, bạn có thể tránh được phần lớn việc học này bằng cách tập trung lại vào việc triển khai TURN/STUN/ICE, hiểu cách chúng được triển khai và cách sử dụng hành vi tiêu chuẩn hóa của chúng.

giải pháp khả thi

  • PJSIP - Chứa thư viện truyền tải NAT cấp cao độc lập cho C/C++, với các ràng buộc cho các ngôn ngữ khác. Nếu bạn chỉ cần thành phần con thư viện NAT Traversal, hãy xem PJNATH
  • LibJingle - Ngăn xếp P2P (điểm-điểm) và RTC (giao tiếp thời gian thực) được xây dựng trên XMPP. Lưu ý rằng nhiều triển khai LibJingle không thể tương tác với đặc tả XMPP Jingle thực tế và các thông số kỹ thuật phụ.

Những điều này có thể làm tăng thêm độ phức tạp đáng kể cho chương trình, đó là lý do tại sao cần phải tự mình triển khai một số cơ chế.

tài liệu

nhóm làm việc trên mạng

RFC

Microsoft

注意事项

Tôi nghe nói rằng việc chuyển sang IPv6 có thể giải quyết được vấn đề truyền tải NAT, nhưng [có lẽ là không] .can ai đó làm sáng tỏ chủ đề này. Dù sao đi nữa, từ quan điểm thiếu kinh nghiệm của tôi, tiến trình hướng tới IPv6 có vẻ chậm và tôi sẽ không coi đó là một giải pháp.

Về bắt tay C# - P2P không có máy chủ trung tâm, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/23810734/

28 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress