2013-03-07 45 views
1

同行程序員問候,基於MAC的使用Java的筆記本電腦之間的通信

這將是一個長期的問題,所以我忍受。

我在大學做項目,我的部分基本上是通過無線局域網集中在筆記本電腦之間的通信。我使用的語言是Java。此通訊不應要求任何筆記本電腦直接連接另一臺筆記本電腦。因此,我們假設我在一臺計算機上創建了一個訪問點,其他人不應該直接連接到它並獲取IP地址',然後通過IP套接字進行簡單連接。

因此,還有一個選項是通過MAC地址連接'。到目前爲止,我想到的是通過wlan適配器來轉發,例如,我的MAC地址,IP地址。從我以前的網絡課程中,我想將這些信息發送到MAC地址的廣播頻道,以便任何使用wlan打開的筆記本電腦都能得到它。然後,如果我將這些信息保存在數據庫中,只要需要,就可以從數據庫中提取MAC地址和IP地址,將我想發送的信息中繼到特定的MAC地址而不是廣播地址(因此只有特定的MAC地址可以得到它和覆蓋區域的其他機器無法得到它)。

我想,這種在計算機之間進行通信的方式將被證明是非常有用的,我們根本不需要任何套接字編程。順便說一下,在程序中安全性不是問題,因此MAC地址,IP地址等的直接中繼不被視爲問題。過去兩週我對這個概念做了大量的研究,但是我一點都不成功。到目前爲止,我所讀到的是,Java在網絡中無法在第3層以下工作。但是,有一些外部庫可以幫助Java從第2層開始工作,但是我無法以某種方式使它們在我的計算機中工作。我的老師建議我創建自己的小協議,但到目前爲止,我無法弄清楚如何訂購wlan適配器來發送廣播消息。

我的問題是,

(1)實際上是有辦法命令WLAN適配器的具體消息發送到特定的MAC地址在Java中,如ARP。

(2)是否有任何有用的Java庫可以幫助解決這些問題?例如,創建自定義ARP數據包(以及我想要發送的信息),或者可能使我在第2層網絡中處於優勢地位。

回答

0

我不完全明白你在做什麼。 ARP是默認啓用的(你可以通過ifconfig命令禁用它),你可以使用像SIOCGARP這樣的ioctls讀取和寫入內核的ARP表,讀取ARP表,並在必要時發送ARP,並且SIOCSARP設置ARP表項(當然,Java不能直接使用,你需要JNI或更簡單的本地庫,比如JNA或Bridj)。

如果你真的需要創建自己的以太網/ IP/ARP /其他低級別的網絡數據包,看https://code.google.com/p/netutils/

0

還有就是直接使用2級的網絡沒有任何好處,人們已經投入了大量的努力使知識產權工作得很好。使用layer-2的一些缺點是你需要是root用戶,並且是不可移植的。在Java中也不是直接可能的,你需要編寫/使用用C編寫的擴展。

如果你想發送消息到一臺機器,發送一個UDP數據包到它的IP地址。如果你想發送消息到許多機器(全部或某些子組),則發送一個UDP數據包到一個多播組,並讓接收機加入該組。

相關問題