① 如何以編程方式創建和讀取的WEP / EAP無線網路配置中的Android
1. 第1部分:創建一個無線網路的WEP配置編程 。
第2部分:閱讀一個WEP無線網路配置編程
再次Straighforward。
第3部分:讀一個EAP的WiFi配置編程
現在,這是棘手的。你可以找到它通過香草的Android用戶界面中WifiDialog.java節省了EAP的WiFi配置的代碼。唔夠方便我們在我們的應用程序的代碼,那麼不要!如果你碰巧去嘗試這一點,你會得到錯誤說找不到符號eap,phase,client_cert等。有點詳細的調查EnterpriseFieldis private內WiFiConfiguration類和所有的符號,我們無法找到是類型EnterpriseField。好了,我們已經打了一個路障,我們需要這些欄位讀取/保存一個EAP配置,但我們並沒有以編程方式訪問他們!Java Reflection API救援
好吧,我不是一個Java專家,所以我不會越來越到的反射API的細節,例如,你可以谷歌的教程或到達這里。
為了保持簡短而親切,反射API允許你檢查類,介面,欄位在不知道的類,方法等,還可以實例化新對象,並獲取/設置現場reflection.And,重要的是能思考的幫助您訪問私有的類裡面嗯,這是我們需要做的不是嗎? :)
讓我們來檢查代碼示例現在它顯示了如何讀取一個EAP的WiFi反射API。作為一個片段將記錄配置到一個文件,並將其保存在SD卡....非常漂亮..誒;)反射API概述一點點,我相信ING下面的代碼是很容易。
private static final String INT_PRIVATE_KEY = "private_key";
private static final String INT_PHASE2 = "phase2";
private static final String INT_PASSWORD = "password";
private static final String INT_IDENTITY = "identity";
private static final String INT_EAP = "eap";
private static final String INT_CLIENT_CERT = "client_cert";
private static final String INT_CA_CERT = "ca_cert";
private static final String INT_ANONYMOUS_IDENTITY = "anonymous_identity";
final String INT_ENTERPRISEFIELD_NAME = "android.net.wifi.WifiConfiguration$EnterpriseField";
第4部分:儲存的EAP無線網路配置編程
如果你已經讀過的部分3,您已經了解了反射mojo,在這里工作,如果你是直接跳躍到本節,請在第3部分的代碼段之前,看了介紹,你會加快速度通過代碼來這里微風!
void saveEapConfig(String passString, String userName)
{
/********************************Configuration Strings****************************************************/
final String ENTERPRISE_EAP = "TLS";
final String ENTERPRISE_CLIENT_CERT = " CodeGo.net
final String ENTERPRISE_PRIV_KEY = " CodeGo.net
//CertificateName = Name given to the certificate while installing it
/*Optional Params- My wireless Doesn't use these*/
final String ENTERPRISE_PHASE2 = "";
final String ENTERPRISE_ANON_IDENT = "ABC";
final String ENTERPRISE_CA_CERT = "";
/********************************Configuration Strings****************************************************/
/*Create a WifiConfig*/
WifiConfiguration selectedConfig = new WifiConfiguration();
/*AP Name*/
selectedConfig.SSID = "\"SSID_Name\"";
/*Priority*/
selectedConfig.priority = 40;
/*Enable Hidden SSID*/
selectedConfig.hiddenSSID = true;
/*Key Mgmnt*/
selectedConfig.allowedKeyManagement.clear();
selectedConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
selectedConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
/*Group Ciphers*/
selectedConfig.allowedGroupCiphers.clear();
selectedConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
selectedConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
selectedConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
selectedConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
/*Pairwise ciphers*/
selectedConfig.allowedPairwiseCiphers.clear();
selectedConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
selectedConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
/*Protocols*/
selectedConfig.allowedProtocols.clear();
selectedConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
selectedConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
// Enterprise Settings
// Reflection magic here too, need access to non-public APIs
try {
// Let the magic start
Class[] wcClasses = WifiConfiguration.class.getClasses();
// null for overzealous java compiler
Class wcEnterpriseField = null;
for (Class wcClass : wcClasses)
if (wcClass.getName().equals(INT_ENTERPRISEFIELD_NAME))
{
wcEnterpriseField = wcClass;
break;
}
boolean noEnterpriseFieldType = false;
if(wcEnterpriseField == null)
noEnterpriseFieldType = true; // Cupcake/Donut access enterprise settings directly
Field wcefAnonymousId = null, wcefCaCert = null, wcefClientCert = null, wcefEap = null, wcefIdentity = null, wcefPassword = null, wcefPhase2 = null, wcefPrivateKey = null;
Field[] wcefFields = WifiConfiguration.class.getFields();
// Dispatching Field vars
for (Field wcefField : wcefFields)
{
if (wcefField.getName().equals(INT_ANONYMOUS_IDENTITY))
wcefAnonymousId = wcefField;
else if (wcefField.getName().equals(INT_CA_CERT))
wcefCaCert = wcefField;
else if (wcefField.getName().equals(INT_CLIENT_CERT))
wcefClientCert = wcefField;
else if (wcefField.getName().equals(INT_EAP))
wcefEap = wcefField;
else if (wcefField.getName().equals(INT_IDENTITY))
wcefIdentity = wcefField;
else if (wcefField.getName().equals(INT_PASSWORD))
wcefPassword = wcefField;
else if (wcefField.getName().equals(INT_PHASE2))
wcefPhase2 = wcefField;
else if (wcefField.getName().equals(INT_PRIVATE_KEY))
wcefPrivateKey = wcefField;
}
Method wcefSetValue = null;
if(!noEnterpriseFieldType){
for(Method m: wcEnterpriseField.getMethods())
//System.out.println(m.getName());
if(m.getName().trim().equals("setValue"))
wcefSetValue = m;
}
/*EAP Method*/
if(!noEnterpriseFieldType)
{
wcefSetValue.invoke(wcefEap.get(selectedConfig), ENTERPRISE_EAP);
}
else
{
wcefEap.set(selectedConfig, ENTERPRISE_EAP);
}
/*EAP Phase 2 Authentication*/
if(!noEnterpriseFieldType)
{
wcefSetValue.invoke(wcefPhase2.get(selectedConfig), ENTERPRISE_PHASE2);
}
else
{
wcefPhase2.set(selectedConfig, ENTERPRISE_PHASE2);
}
/*EAP Anonymous Identity*/
if(!noEnterpriseFieldType)
{
wcefSetValue.invoke(wcefAnonymousId.get(selectedConfig), ENTERPRISE_ANON_IDENT);
}
else
{
wcefAnonymousId.set(selectedConfig, ENTERPRISE_ANON_IDENT);
}
/*EAP CA Certificate*/
if(!noEnterpriseFieldType)
{
wcefSetValue.invoke(wcefCaCert.get(selectedConfig), ENTERPRISE_CA_CERT);
}
else
{
wcefCaCert.set(selectedConfig, ENTERPRISE_CA_CERT);
}
/*EAP Private key*/
if(!noEnterpriseFieldType)
{
wcefSetValue.invoke(wcefPrivateKey.get(selectedConfig), ENTERPRISE_PRIV_KEY);
}
else
{
wcefPrivateKey.set(selectedConfig, ENTERPRISE_PRIV_KEY);
}
/*EAP Identity*/
if(!noEnterpriseFieldType)
{
wcefSetValue.invoke(wcefIdentity.get(selectedConfig), userName);
}
else
{
wcefIdentity.set(selectedConfig, userName);
}
/*EAP Password*/
if(!noEnterpriseFieldType)
{
wcefSetValue.invoke(wcefPassword.get(selectedConfig), passString);
}
else
{
wcefPassword.set(selectedConfig, passString);
}
/*EAp Client certificate*/
if(!noEnterpriseFieldType)
{
wcefSetValue.invoke(wcefClientCert.get(selectedConfig), ENTERPRISE_CLIENT_CERT);
}
else
{
wcefClientCert.set(selectedConfig, ENTERPRISE_CLIENT_CERT);
}
// Adhoc for CM6
// if non-CM6 fails gracefully thanks to nested try-catch
try{
Field wcAdhoc = WifiConfiguration.class.getField("adhocSSID");
Field wcAdhocFreq = WifiConfiguration.class.getField("frequency");
//wcAdhoc.setBoolean(selectedConfig, prefs.getBoolean(PREF_ADHOC,
// false));
wcAdhoc.setBoolean(selectedConfig, false);
int freq = 2462; // default to channel 11
//int freq = Integer.parseInt(prefs.getString(PREF_ADHOC_FREQUENCY,
//"2462")); // default to channel 11
//System.err.println(freq);
wcAdhocFreq.setInt(selectedConfig, freq);
} catch (Exception e)
{
e.printStackTrace();
}
} catch (Exception e)
{
// TODO Auto-generated catch block
// FIXME As above, what should I do here?
e.printStackTrace();
}
WifiManager wifiManag = (WifiManager) getSystemService(Context.WIFI_SERVICE);
boolean res1 = wifiManag.setWifiEnabled(true);
int res = wifiManag.addNetwork(selectedConfig);
Log.d("WifiPreference", "add Network returned " + res );
boolean b = wifiManag.enableNetwork(selectedConfig.networkId, false);
Log.d("WifiPreference", "enableNetwork returned " + b );
boolean c = wifiManag.saveConfiguration();
Log.d("WifiPreference", "Save configuration returned " + c );
boolean d = wifiManag.enableNetwork(res, true);
Log.d("WifiPreference", "enableNetwork returned " + d );
}
以及多數民眾贊成它!我希望這可以幫助開發者丟失,:)
希望這會有所幫助的
② 筆記本電腦如何安裝無線網路適配器及程序
1. 首先要確認筆記本的硬體配置正常,如無線網卡驅動是否安裝。桌面右擊「我的電腦」,點擊「管理」菜單進入,進入計算機管理界面,打開「系統工具」菜單,雙擊進入「設備管理器」界面;
2. 在「網路適配器」下,可以看到現在安裝或內置的無線網卡狀態;若無線網卡前有「黃色的感嘆號」,則說明這台電腦的無線網卡安裝有問題,請重新安裝驅動或聯系電腦提供商;
3. 然後是網路的配置。進入計算機管理界面後打開「服務和應用程序」菜單,雙擊進入「服務」界面。在「服務」列表中找到「Wireless Zero Configeration」應用程序,查看是否處於「已啟動」狀態,如未啟動請單擊滑鼠右鍵選擇「啟動」菜單;
4. 進入「控制面板」——>「網路連接」界面,右鍵點擊「無線網路連接」——>「屬性」,選擇「無線網路配置」菜單,在無線網路配置中勾選「用windows配置我的無線網路設置」;
5. 進入「控制面板」——>「網路連接」界面,查看「無線網路連接」是否為「啟用」狀態,如為「禁用」狀態,請右鍵點擊「無線網路連接」,選擇「啟用」菜單即可。處於啟用狀態的「無線網路連接」(正確);
6. 可以進入「控制面板」——>「網路連接」界面,右鍵點擊「無線網路連接」——>「查看可用的無線連接」 ,也可以直接雙擊電腦桌面右下角的「無線網路連接」,可以查看電腦搜索到的所有可用的各運營商的無線網路;
7. 選擇正確的SSID連接無線網路,SSID(Service Set Identifier)用於區分不同的網路,也就是不同的路由器,為便於區分,請在路由器裡面設置個性的方便記的名稱。搜索到的無線網路中雙擊選擇CMCC的接入點連接;
8. 電腦桌面右下角的「無線網路連接」圖標上的紅叉應已消失,雙擊後可以查看到當前無線網路連接的狀態,包括接入的網路名稱(CMCC)、信號強度等。
③ c語言可以編寫通過無線網路傳輸的協議嗎
你好!
c
語言可以。
你說不考慮硬體是不可能的,軟體是建立在硬體的基礎上的,其實能編寫通過無線網路傳輸的協議不斤只有c
語言,但是能夠和硬體緊密結合的還得數c
語言了
基於unix和linux
的無線網路傳輸的協議幾乎都是用c編寫的
我的回答你還滿意嗎~~
④ 學網路網路編程,是不是非得要先學html
HTML是基礎。
Javascript是HTML的編程語言(腳本)
但是HTML和Javascript只是用戶端的界面操作。
網路編程需要以上作為基礎,其次學習網路編程需要懂得網路技術包括網路的七層架構、Internet、無線網、IPv4、IPv6等等。
但最重要的是一定要打下良好的編程基礎。建議先學習一下C語言吧
⑤ 請教c++無線網路編程技術
我這段時間也在學網路編程,給推薦本書<<unix網路編程>>,個人感覺這才是正宗,雖然很多,但是沒有哪一門學問能以兩天就能學成的,慢慢來。
windows上的東西,次,因為你要搞網路編程就免不了要做伺服器,通常伺服器上有多少公司敢用windows.
⑥ wifi的設計者是誰如何學習網路,目前什麼無線傳輸方式最快。網路編程的定義是什麼,我想學習網路的
樓主你好 、WIFI技術由澳洲政府的研究機構CSIRO在90年代發明並於1996年在美國成功申請了無線網技術專利。 發明人是悉尼大學工程系畢業生Dr John O'Sullivan領導的一群由悉尼大學工程系畢業生組成的研究小組 。
學習網路一般兩種方法。一是自學、再者就是培訓班了!
而在計算機網路領域,無線通信介質主要是微波和衛星。
網路編程的定義:
網路編程從大的方面說就是對信息的發送到接收,中間傳輸為物理線路的作用,編程人員可以不用考慮……
網路編程最主要的工作就是在發送端把信息通過規定好的協議進行組裝包,在接收端按照規定好的協議把包進行解析,從而提取出對應的信息,達到通信的目的!中間最主要的就是數據包的組裝,數據包的過濾,數據包的捕獲,數據包的分析,當然最後再做一些處理!
代碼,開發工具,資料庫,伺服器架設和網頁設計這5部分你都要接觸
學習網路建議多去烏雲看看 謝謝
⑦ Java網路編程基本概念是什麼
1、Java網路編程基本概念——主機的網路層
主機網路層定義特定網路介面(如乙太網或WiFi天線)如何通過物理連接將IP數據報發送到本地網路或世界其他地方。在主機網路層中,連接不同計算機的硬體部分(電纜、光纖、無線電波或煙霧信號)有時被稱為網路的物理層。Java程序員不需要擔心這一層,除非出現錯誤,例如計算機後面的插頭脫落或有人切斷了您與外部世界之間的T-1線。換句話說,Java將永遠看不到物理層。
2、Java網路編程基本概念——網路層
Internet層的下一層是主機網路層,這是Java程序員需要考慮的第一層。網際網路層協議定義了數據位和位元組如何組織成更大的組,稱為包,也定義了不同計算機互相查找的定址機制。Internet Protocol (IP)是世界上使用最廣泛的Internet層協議,也是Java唯一了解的Internet層協議。
網際網路協議基本上是兩種協議:IPV4使用32位地址,IPV6使用128位地址,並增加了技術特性來幫助路由。這是兩種完全不同的網路協議,如果沒有特殊的網關/隧道協議,它們甚至不能在同一網路上互操作,但是Java向您隱藏了幾乎所有這些差異。
除了路由和定址之外,網際網路層的第二個作用是使不同類型的主機網路層能夠彼此對話。網際網路路由器在WiFi和乙太網、乙太網和DSL、DSL和光纖往返協議之間進行交換。沒有網際網路層或類似的分層,每台計算機只能與同一類型網路上的其他計算機通信。網際網路層負責使用適當的協議將異類網路彼此連接起來。
3、Java網路編程基本概念——傳輸層
原始數據報有一些缺點。最明顯的缺點是無法保證可靠的傳輸,即使可以保證,也可能在傳輸過程中被損壞。頭檢查只能檢測頭中的損壞,而不能檢測數據報的數據部分。最後,即使數據報沒有損壞地到達了它的目的地,它也可能不能按照發送的順序到達。
傳輸層負責確保按發送的順序接收數據包,確保沒有數據丟失或銷毀。如果數據包丟失,傳輸層要求發送方重新傳輸該數據包。為此,IP網路向每個數據報添加了一個額外的頭,其中包含更多信息。
這個級別有兩個主要協議。第一個是傳輸控制協議(TCP),這是一個昂貴的協議,允許丟失或損壞的數據按照發送順序重新傳輸。第二個協議是用戶數據報協議(User Datagram Protocol, UDP),它允許接收方檢測損壞的數據包,而不保證它們按照正確的順序發送(或者根本不發送)。然而,UDP通常比TCP快。TCP被稱為可靠協議。UDP是不可靠的。
4、Java網路編程基本概念——應用程序層
向用戶交付數據的層稱為應用層。以下三個層定義如何將數據從一台計算機傳輸到另一台計算機。應用層決定數據傳輸後的操作。有HTTP為用戶Web, SMTP, POP, IMAP為用戶電子郵件;FSP, TFTP用於文件傳輸,NFS用於文件訪問;文件共享使用Gnutella和BitTorrent;會話發起協議(SIP)和Skype用於語音通信。此外,您的程序可以在必要時定義自己的應用程序級協議。(頁面)
5、Java網路編程基本概念——IP、TCP、UDP
IP被設計成允許任意兩點之間有多條路由,繞過損壞的路由器來路由數據包。由於兩點之間有多條路由,而且由於網路流量或其他因素,它們之間的最短路徑可能會隨著時間而變化,因此構成特定數據流的數據包可能不會走同一條路由。即使它們全部到達,也可能不是按照它們被發送的順序到達的。為了改進這一基本機制,TCP被放置在IP上,以便連接的兩端可以確認收到的IP數據包,並請求重傳丟失或損壞的數據包。此外,TCP允許接收端上的數據包按照發送的順序重新分組。
然而,TCP有很多開銷。因此,如果單個數據包的丟失不會完全破壞數據,那麼可以使用UDP發送數據包,而不需要TCP提供的保證。UDP是一種不可靠的協議。它不能保證信息包將到達它們的目的地,或者它們將以它們被發送的相同順序到達。
6、Java網路編程基本概念——IP地址和域名
IPv4網路上的每台計算機都有一個4位元組的數字ID。通常在一個點上以四段格式寫,比如192.1.32.90,每個數字是一個無符號位元組,范圍從0到255。IPv4網路上的每台計算機都有一個唯一的四段地址。當數據通過網路傳輸時,包的報頭包括要發送到的機器的地址(目的地址)和要發送到的機器的地址(源地址)。路由上的路由器通過檢查目的地址來選擇發送包的最佳路徑。包含源地址是為了讓收件人知道該對誰進行回復。
雖然計算機可以很容易地處理數字,但人類並不擅長記住它們。因此,域名系統(DNS)被開發出來,用來將容易記住的主機名(如www.12345.com)轉換成數字互聯網地址(如208.201.243.99)。當Java程序訪問網路時,它們需要同時處理數字地址和相應的主機名。這些方法由java.net.InetAddress類提供。
7、Java網路編程基本概念——港口
如果每台計算機一次只做一件事,地址就足夠了。但是現代計算機同時做許多不同的事情。電子郵件需要與FTP請求分開,而FTP請求也需要與Web通信分開。這是通過埠完成的。具有IP地址的每台計算機有數千個邏輯埠(確切地說,每個傳輸層協議有65,535個埠)。這些只是計算機內存中的抽象,不代表任何物理對象,不像USB埠。每個埠在1到65535之間進行數字標識。每個埠可以分配給一個特定的服務。
8、Java網路編程基本概念——一個防火牆
在互聯網上有一些頑皮的人。要排除它們,通常需要在本地網路上設置一個接入點,並檢查進出該接入點的所有流量。位於網際網路和本地網路之間的一些硬體和軟體會檢查所有輸入和輸出的數據,以確保它是防火牆。防火牆通常是路由器的一部分,它將本地網路連接到更大的網際網路,並可以執行其他任務,如網路地址轉換。另外,防火牆可以是單獨的機器。防火牆仍然主要負責檢查進出其網路介面的數據包,根據一組規則接收或拒絕數據包。
本篇《什麼是Java網路編程基本概念?看完這篇文章你一定可以明白》到這里就已經結束了,小編一直認為,某一個編程軟體受歡迎是有一定原因的,首先吸引人的一定是其功能,環球網校的小編祝您java學習之路順利,如果你還想知道更多java知識,也可以點擊本站的其他文章進行學習。
⑧ C#無線編程也用Socket么
要看具體的協議的,有線還是無線只是一種形式,不同的無線協議也不一樣,像藍牙用bluetooth協議,電信無線用GPRS或者CMDA等協議,如果是WIFI的話應該可以用Socket,別的話你可能需要用相關的協議了,或者做個協議轉換。
⑨ 網路編程的人對電腦熟悉嗎
正常情況是是熟悉的,因為搞網路編程的人需要長時間使用電腦,而對於電腦的性能等方面還是要有一定了解的。
⑩ 有線網路編程無線網路 無線AP
可以。。電腦開放網路共享。。以電腦為無線發射器,