2012-02-03 43 views
8

Tôi đang cố gắng lấy danh sách tất cả IP trên mạng LAN. Lý do cho điều này là tôi đang viết một ứng dụng sử dụng máy in hóa đơn STAR TSP100LAN.Liệt kê tất cả địa chỉ IP của thiết bị trên mạng wifi iOS sdk mà không có bonjour?

Quy trình lấy địa chỉ IP của máy in khá cồng kềnh đối với người dùng cuối. Nó liên quan đến việc tắt máy in, giữ nút nạp giấy, bật máy in trở lại, chờ 15 giây để máy in có được địa chỉ IP thông qua DHCP và sau đó rút ra một biên lai với thông tin này trên đó.

Thấy máy in không bật Bonjour có thể nhận địa chỉ IP thông qua các phương pháp khác không?

Bất kỳ trợ giúp nào được đánh giá cao! Tôi hy vọng đây không phải là một câu hỏi lặp lại, nhưng thông qua tìm kiếm của tôi, tôi dường như không thể tìm ra giải pháp nào!

CẬP NHẬT: Ok sau một chút suy nghĩ tôi đã đưa ra một giả giải pháp:

  1. Xác định IPAddress hiện hành của iPad thông qua NSHost.

  2. Strip các góc phần tư cuối cùng từ IPAddress

  3. Sử dụng chuỗi tước như một tiền tố, lặp 1-255 cho góc phần tư cuối cùng

  4. Mỗi lần lặp, nỗ lực để mở một cổng đến địa chỉ được sử dụng sdk của máy in Nếu tôi nhận được phản hồi hợp lệ, tôi biết rằng IP là máy in Nếu tôi không loại trừ IP khỏi danh sách máy in khả dụng.

Cho đến nay tính năng này đã hoạt động, tôi đặt thời gian chờ là 5 mili giây cho mỗi lần mở cổng. Nhưng đã tìm thấy rằng điều này có thể trả lại một số kết quả null mặc dù có thực sự là một máy in trên mạng với một địa chỉ IP được chỉ định.

Có lẽ nếu tôi nhận được kết quả rỗng lần đầu tiên tôi nên tăng thời gian chờ lên 15 milles giây cho lần thử thứ hai khi tìm kiếm.

+3

* Dải phần tư cuối cùng từ IPAddress ... lặp 1-255 * Vui lòng Google "mặt nạ mạng con" –

+2

Theo nhà sản xuất có sẵn SDP (Giao thức khám phá sao). Bạn nên cố gắng thực hiện nó. Bởi vì bạn có thể 'thành công', hãy mở cùng một cổng trên một thiết bị không liên kết với suy nghĩ rằng bạn đã kết nối với máy in, nếu không. –

Trả lời

2

Cách tiếp cận của bạn bỏ phiếu cho mạng con cục bộ/8 có lẽ là cách tốt nhất bạn có thể làm. Tôi không thể tìm thấy bất kỳ API nào để có thêm thông tin chi tiết về giao diện mạng (ví dụ: mặt nạ mạng con) trong iOS. (Mặc dù sử dụng mặt nạ mạng con sẽ là một cách chính xác hơn để xác định phạm vi để lặp lại, nếu bạn có thể nhận được nó.)

Như bạn đã thấy, 5ms là khoảng thời gian khá chặt chẽ; Theo kinh nghiệm của tôi, 15ms có thể STILL khá chặt chẽ đối với kết nối TCP qua WiFi. Như một bước tiếp theo, tôi sẽ đề nghị song song việc bỏ phiếu của phạm vi, và do đó cho phép bạn mở rộng khoảng thời gian bạn sẵn sàng chờ đợi. Cách đơn giản nhất có thể là sử dụng GCD. Bạn cũng có thể bắt đầu quá trình bỏ phiếu này trong nền trước khi người dùng yêu cầu máy in một cách rõ ràng, điều này có thể cải thiện khả năng phản hồi của người dùng đối với ứng dụng của bạn. Cách khác, bạn có thể sử dụng API CFSocket để mở tất cả các kết nối này (CFSocketCreate, CFSocketConnectToAddress, và bạn bè) và nhận song song bằng cách phục vụ tất cả chúng trên luồng chính với callbacks/runloop. Sau đó, khi những cuộc gọi lại đến, hãy ghi lại địa chỉ trả lời trên cổng đã cho. Trừ khi máy in không sử dụng TCP vì lý do nào đó, điều này có thể thực hiện được. Một khi bạn biết địa chỉ nào trả lời trên cổng đó, bạn có thể lặp qua danh sách đó (hy vọng nhỏ hơn nhiều) kết nối với chính SDK máy in.Cách tiếp cận này sẽ cung cấp cho bạn nhiều hơn (và cách thanh lịch hơn) song song hơn sinh ra một số lượng lớn các chuỗi GCD, nhưng có thể khó khăn để có được đầu của bạn xung quanh nếu bạn đã không làm việc với runloops trước.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn vì isoncc repsonse, tôi đang chạy với giải pháp của tôi bây giờ, ngoại trừ có lẽ sẽ tăng thời gian chờ defualt lên 20ms và tăng từ đó trên bất kỳ tìm kiếm cấp dưới nào do không có phản hồi. Cảm ơn một lần nữa! – happs

+1

@ipmcc Câu hỏi SO gần đây liệt kê cách lấy mặt nạ mạng con http://stackoverflow.com/questions/15156028/how-to-get-subnet-mask-and-broadcast-address-of-personal-hotspot-in- ios –

0

Bạn có thể nhanh chóng winnow danh sách xuống từ 255 xuống một số nhỏ hơn bằng cách ping địa chỉ quảng bá sau đó nhìn vào bộ nhớ cache arp của bạn.

Chỉ hoạt động đối với máy chủ phản hồi các ping phát sóng.

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