2012-04-18 20 views
13

Tôi muốn kết nối nhiều thiết bị thông qua ổ cắm mà không cần triển khai máy chủ nào. Tôi sẽ chỉ sử dụng để nhận địa chỉ IP của các thiết bị sẽ đăng ký.Có thể kết nối hai thiết bị ios bằng cách sử dụng ổ cắm bằng cách nhận địa chỉ IP của chúng không?

+1

Có lẽ dịch vụ Bonjour là những gì bạn đang tìm kiếm? – user523234

+0

Không, Thiết bị được kết nối sẽ không nằm trên cùng một mạng. Chúng sẽ được kết nối với ba mạng g của chúng hoặc kết nối gprs của nhà cung cấp mạng – AnishGupta

+3

Bạn sẽ cần một số cơ chế khám phá. Nếu các thiết bị không nằm trên cùng một mạng, bạn sẽ cần một số loại máy chủ. Nếu các thiết bị trên 3G bạn thậm chí không thể chắc chắn rằng IP của họ sẽ là duy nhất. – starbugs

Trả lời

4

Bạn có thể sử dụng GameKit. Nó có số api matchmaking có thể giúp bạn.

Nó có thể được sử dụng cho các ứng dụng không phải trò chơi.

+0

là apm mai mối làm việc trên internet? bởi vì tôi muốn một số loại cơ chế đó có thể kết nối nhiều thiết bị qua internet.as theo kiến ​​thức của tôi Gamekit chỉ có thể kết nối các thiết bị bằng bluetooth hoặc mạng cục bộ. – freelancer

+0

Nó cũng hoạt động trên internet! – MacTeo

+3

Bạn đang bối rối hai điều. GKSession, phần ngang hàng của GameKit, chỉ hoạt động qua bluetooth hoặc mạng nội bộ. GKMatchmaker làm việc trên internet, nhưng nó không phải là peer-to-peer: tất cả mọi thứ được định tuyến thông qua các máy chủ của Apple hoặc của riêng bạn. Với một máy chủ tùy chỉnh và một chút công việc, nó có thể được sử dụng như một phần của một người giới thiệu cho một mạng lưới P2P thực, nhưng bản thân nó không đến bất cứ đâu gần giải quyết vấn đề. – abarnert

9

Có hai vấn đề chính đối với liên lạc ngang hàng: khám phá và khả năng truy cập.

Trước tiên, bạn cần phải biết địa chỉ IP của các đồng nghiệp khác để kết nối với họ. Khi bạn đã kết nối với một mạng lưới các đồng nghiệp, tất cả họ có thể cập nhật cho nhau về trạng thái của mạng, cho thấy những người đồng nghiệp tốt hơn với nhau, thông báo xung quanh các thông báo về những người mới tham gia và rời đi, v.v. để thiết kế và thực hiện cơ chế giao dịch thông tin đó. Quan trọng hơn, bạn cần phải khởi động mọi thứ theo một cách nào đó, bởi vì khi một đồng nghiệp mới khởi động, nó nằm trong một mạng lưới của chính nó, và nó không có thông tin để tự cung cấp.

Một khả năng là có một số "siêu nhân" nổi tiếng (bạn chạy) luôn được kết nối và đưa địa chỉ của họ vào ứng dụng. Hoặc bạn có thể có "máy chủ giới thiệu" thay vì đồng nghiệp, phục vụ nhiều chức năng tương tự. Hoặc bạn có thể có một số cách địa chỉ giao dịch bên ngoài (đơn giản nhất là người dùng giao dịch trên diễn đàn web hoặc kênh IRC hoặc trực tiếp và nhập chúng theo cách thủ công), có thể được tự động hóa theo các mức độ khác nhau. Ngoài ra còn có các phím tắt có thể giúp - Bonjour có thể đưa các đồng nghiệp khác vào lưới miễn là một đồng nghiệp trên mạng LAN đã có sẵn; GameCenter/GameKit có thể được sử dụng như một mạng lưới giao dịch tự động bên ngoài; v.v.

Khi bạn đã giải quyết được sự cố phát hiện, bạn vẫn gặp phải sự cố về khả năng hiển thị. Hầu hết các thiết bị iOS thường không có địa chỉ IP có thể truy cập công khai; thay vào đó, chúng nằm phía sau các bộ định tuyến thực hiện dịch địa chỉ mạng, cho dù chúng là bộ định tuyến Wi-Fi tại nhà hay mạng 3G của mạng di động. Điều này có nghĩa là bạn cần một số cách để thực hiện Cú đấm lỗ NAT để nhận hai iPhone nói chuyện với nhau. Ai đó biết cả địa chỉ công cộng và địa chỉ nội bộ của từng thiết bị đều có thể sắp xếp để họ thiết lập kết nối với nhau. Bạn có thể có một trong hai đồng nghiệp bình thường làm điều này (mặc dù điều đó làm cho vấn đề khởi động thậm chí còn lớn hơn) hoặc có các siêu máy chủ/máy chủ giới thiệu của bạn/v.v. làm đi.

Nếu bạn muốn tự mình xây dựng tất cả điều này, bạn có thể muốn xem các triển khai khác. BitTorrent (bao gồm cả trình theo dõi và DHT) được hiểu rõ và được ghi lại ở mức độ liên tục từ "dối trá đến trẻ em" cho người dùng cuối tò mò về thông số giao thức chi tiết và triển khai nguồn mở. Và sau đó xem xét một số mạng P2P khác, vì BitTorrent không hoàn hảo và không cố gắng làm mọi thứ mà mọi người đều nghĩ ra.

+1

Xem http://stackoverflow.com/questions/6421742/tcp-hole-punching-on-iphone để biết thêm thông tin về cách đục lỗ trên iOS. Xem http://www.rahul.net/dholmes/ctorrent/ cho nguồn để tăng cường cTorrent, một khách hàng BitTorrent cho iPhone. – abarnert

+1

Có vấn đề khác nếu bạn muốn kết nối lâu dài: iPhone luôn thay đổi địa chỉ. Vì vậy, bạn cần phải phát hiện ra rằng từ một bên hay khác, và có thể tái đục lỗ để thiết lập lại kết nối. Có một số giao thức P2P đưa vào tài khoản (tôi tin RTMFP của Adobe có, nhưng tôi không biết liệu các sách trắng cũ giải thích cách nó hoạt động vẫn còn), nhưng hầu hết không, bởi vì chúng được thiết kế cho các hệ thống máy tính để bàn . – abarnert

0

Bạn không thể. Nếu thiết bị là tất cả trực tuyến với wifi, nó có thể có thể và dựa vào các thiết lập router giống như pc kết nối. Nếu một số thiết bị được kết nối với 3g hoặc gprs protocal, chúng có thể không có địa chỉ IP nào cả.

+0

Không đúng sự thật. GPRS và tất cả các công nghệ di động khác được thiết bị iOS sử dụng đảm bảo địa chỉ IP. (GPRS được sử dụng để cho phép X.25 chỉ, nhưng chỉ trong phiên bản đầu tiên lỗi thời.) Địa chỉ IP có thể không được định tuyến công khai, nhưng điều tương tự cũng đúng đối với hầu hết các mạng WiFi và các kỹ thuật đấm NAT tương tự. – abarnert

-1

Xây dựng một khách hàng Jabber cho iOS: XMPP Cài đặt

đây là link

+0

Sửa lỗi nếu tôi sai, nhưng khách hàng đó không thực sự thực hiện các kết nối ngang hàng thông qua STUN/lỗ đục lỗ, nó sử dụng TURN để chuyển tiếp mọi thứ qua máy chủ. Và trên thực tế, nó dựa vào máy chủ TURN đó là Bonjour-khả năng trên mạng cục bộ. Vì vậy, nó không phải là một câu trả lời cho câu hỏi cả. – abarnert

+0

là bình luận ở trên có đúng không? Tôi đã nghĩ đến việc sử dụng XMPP để thực hiện STUN. – roocell

+0

@roocell tôi đang cố gắng thiết lập máy chủ khách hàng jabber và từ đó xử lý các vấn đề users.but trong việc tạo máy chủ jabber, tôi đã tải xuống ejabber 2.10 nhưng không thể đăng nhập trong bảng điều khiển quản trị – freelancer

3

Tôi đã làm việc trên một cái gì đó tương tự và đó là một nỗi đau lớn trong ass. Có 3 cân nhắc: 1) Khả năng hiển thị 2) Khám phá 3) Bản thân kết nối.

1) Thậm chí không cân nhắc sử dụng 3g/4g, nó sẽ không hoạt động tốt để giữ kết nối ổ cắm mở.

2) Tôi muốn sử dụng một số loại dịch vụ môi giới giữa hai người trên internet để kết nối cả hai. Để khám phá, bạn chỉ có thể liệt kê những thiết bị nào có sẵn trên dịch vụ.

3) Đối với kết nối, tôi tìm thấy các thư viện socket IOS được khá đau đớn để sử dụng, nhưng nếu bạn đi xuống mức ổ cắm BSD nó không phải là xấu. Tôi nghĩ sẽ rất thú vị khi sử dụng ổ cắm zmq; có thể đơn giản hóa việc viết dịch vụ môi giới.

+1

# 1 là một điểm tốt. Bạn phải có một số logic cấp ứng dụng để truyền các thay đổi địa chỉ (và đục lỗ lại) cho các đồng nghiệp khi chúng thay đổi địa chỉ. Điều này có thể thực hiện được, nhưng nó có nghĩa là nếu bạn muốn các kết nối đáng tin cậy, có trật tự, dài hạn, bạn sẽ phải tự xây dựng chúng ở cấp ứng dụng, thay vì dựa vào sự kỳ diệu của TCP. – abarnert

+0

Ồ, và điều đó cũng có nghĩa là bạn cần một số ID ngang hàng duy nhất tồn tại ít nhất trong một phiên để sử dụng làm địa chỉ, vì vậy bạn có thể hỏi lưới cho địa chỉ mới của người bạn vừa nói. – abarnert

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