當前位置:首頁 » 合同協議 » java協議

java協議

發布時間: 2020-11-20 23:38:04

A. Java中怎麼注冊協議

注冊協議
URL的static URLStreamHandler getURLStreamHandler(String protocol) 方法用於獲取獲取協議處理類
URL提供了兩種注冊協議的途徑。
1)設置URLStreamHandlerFactory,2)設置jvm啟動參數java.protocol.handler.pkgs。
兩者可以同時使用。
設置URLStreamHandlerFactory
URL的方法
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac) {
synchronized (streamHandlerLock) {
if (factory != null) {
throw new Error("factory already defined");
}
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkSetFactory();
}
handlers.clear();
factory = fac;
}
}
public interface URLStreamHandlerFactory {
URLStreamHandler createURLStreamHandler(String protocol);
}
整個jvm只能設置一次,再次設置不起作用。調用URL.setURLStreamHandlerFactory(fac)。
一般是在伺服器的代碼中設置,比如tomcat,jboss ,was等,用於注冊伺服器自己的協議,應用級沒法設置,因為伺服器已經設置過了,應用即使設置了也不起作用。
啟動參數-Djava.protocol.handler.pkgs
通過-Djava.protocol.handler.pkgs=cn.ccb.wfcp注冊自定義協議的包。要求協議處理類的類名必須是Handler,包名的最後是協議名。示例如下,定義了brules協議。
package cn.ccb.wfcp.brules;
public class Handler extends URLStreamHandler {
如果要定義多個協議包就用"|"分割,比如-Djava.protocol.handler.pkgs=cn.ccb.wfcp|cn.ccb.wfcp22.
jvm內置的協議也是按照上面的方式定義的,但不用通過-Djava.protocol.handler.pkgs注冊,而是將內置的協議包拼接到後面。內置協議都在sun.net.www.protocol包下面。
獲取到Handler類名後去載入class。Class cls = null;
try {
cls = Class.forName(clsName);
} catch (ClassNotFoundException e) {
ClassLoader cl = ClassLoader.getSystemClassLoader();
if (cl != null) {
cls = cl.loadClass(clsName);
}
}
if (cls != null) {
handler =
(URLStreamHandler)cls.newInstance();
}

B. java現在是什麼使用協議

Socket,又稱為套接字,Socket是計算機網路通信的基本的技術之一。如今大多數基於網路的軟體,如瀏覽器,即時通訊工具甚至是P2P下載都是基於Socket實現的。本文會介紹一下基於TCP/IP的Socket編程,並且如何寫一個客戶端/伺服器程序。
方法/步驟

Java中的socket編程 下面的部分將通過一些示例講解一下如何使用socket編寫客戶端和伺服器端的程序。 注意:在接下來的示例中,我將使用基於TCP/IP協議的socket編程,因為這個協議遠遠比UDP/IP使用的要廣泛。並且所有的socket相關的類都位於java.net包下,所以在我們進行socket編程時需要引入這個包。

寫入數據 接下來就是寫入請求數據,我們從客戶端的socket對象中得到OutputStream對象,然後寫入數據後。很類似文件IO的處理代碼。

打開伺服器端的socket

讀取數據 通過上面得到的socket對象獲取InputStream對象,然後安裝文件IO一樣讀取數據即可。這里我們將內容列印出來。

使用socket實現一個回聲伺服器,就是伺服器會將客戶端發送過來的數據傳回給客戶端。

C. 怎麼用java實現ssh協議通信

importch.ethz.ssh2.Connection;
importch.ethz.ssh2.Session;
importch.ethz.ssh2.StreamGobbler;
importcom.io.Debug;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStream;
/**
*
*@authorleon.lee
*/
{
privateStringusername="";
privateStringoldpassword="";
privateConnectionconn=;
privatebooleanhasError=false;
privateStringErrorMessage="";
privatebooleanisSuccessfully=false;
privateStringSystemMessage="";

publicstaticfinalStringHOST="127.0.0.1";//serverip
publicbooleanisSuccessfully(){
returnisSuccessfully;
}
publicbooleanisHasError(){
returnhasError;
}
publicStringgetErrorMessage(){
returnErrorMessage;
}
publicvoidsetErrorMessage(Stringmsg){
hasError=true;
this.ErrorMessage=msg;
}
/**
*Createsanewinstanceof<code>ChangeEmailPassword</code>.
*@paramusername
*@paramoldpassword
*/
publicChangeEmailPassword(Stringusername,Stringoldpassword){
this.username=username;
this.oldpassword=oldpassword;
try{
conn=newConnection(HOST);
conn.connect();
/*Authenticate*/
booleanisAuthenticated=conn.authenticateWithPassword(username,oldpassword);
if(isAuthenticated==false){
setErrorMessage("Authenticationfailed.");
conn=;
}
}catch(Exceptione){
conn.close();
conn=;
System.out.println(e);
}
}
publicvoidsetNewPassword(Stringnewpassword){
if(hasError){
return;
}
if(conn==){
return;
}
try{
Sessionsess=conn.openSession();
sess.execCommand("passwd");
InputStreamso=sess.getStdout();
InputStreamerr=sess.getStderr();
OutputStreamout=sess.getStdin();

byte[]buffer=newbyte[500];//其實沒有必要這么大.130就差不多了.怕萬一有什麼提示.
intlength=0;
length=err.read(buffer);
//if(length>0){
//System.out.println("#1:"+newString(buffer,0,length));
////(current)UNIXpassword:
//}
Stringcoldpassword=oldpassword+" ";
out.write(coldpassword.getBytes());
length=err.read(buffer);
//if(length>0){
//System.out.println("#2:"+newString(buffer,0,length));
////(current)UNIXpassword:
//}
Stringcnewpass=newpassword+" ";
out.write(cnewpass.getBytes());
length=err.read(buffer);
if(length>0){
Stringrs=newString(buffer,0,length);
//System.out.println("#3:"+rs);
if(rs.indexOf("BAD")>-1){
sess.close();
conn.close();
setErrorMessage(rs);
return;
}
}
out.write(cnewpass.getBytes());
length=so.read(buffer);
if(length>0){
Stringrs=newString(buffer,0,length);
if(rs.indexOf("successfully")>-1){
this.isSuccessfully=true;
this.SystemMessage=rs;
}
}
/*Closethissession*/
sess.close();
/*Closetheconnection*/
conn.close();
}catch(IOExceptione){
e.printStackTrace(System.err);
}
}
/**
*@
*/
publicstaticvoidmain(String[]args){
ChangeEmailPasswordcep=newChangeEmailPassword("username","oldpassword");
if(cep.isHasError()){
System.out.println(cep.getErrorMessage());
cep=;
return;
}
cep.setNewPassword("newpassword");
if(cep.isHasError()){
System.out.println(cep.getErrorMessage());
cep=;
return;
}
if(cep.isSuccessfully){
System.out.println(cep.getSystemMessage());
}
}
/**
*@returntheSystemMessage
*/
publicStringgetSystemMessage(){
returnSystemMessage;
}
}

D. java如何獲取本機網路協議信息

api上面我翻了下似乎沒有,但是你可以使用java調用本地的shell進行查看(windows和linux的命令不太一樣,但方法一樣)。

代碼:
Process process= Runtime.getRuntime().exec("你本地的shell或者cmd命令");
InputStream s=process.getInputStream();
//從is裡面讀取內容(也就是你的命令執行結果),這里代碼就省略了
process.waitFor();

至於具體命令的話用下 netstat -s 看下

E. JAVA語言支持哪些協議 各協議對JAVA具體的用途

協議最主要用於通信,通信雙方必須遵守協議才能進行正常通信。
可以用生活中的寄信來類比。寄信方必須寫明收信方的地址及收信人姓名,並且把信件放到信封中貼上郵票投遞到郵箱中,收信人才能收到此信件。收信方必須到郵箱中才能收取信件。這種對通信雙方的約束規則,便是協議!

例如Http協議,它規定了瀏覽器應該以什麼樣的格式且怎樣發送請求和接受響應,同時也規定了伺服器應該怎麼樣解析瀏覽器發來的請求並且作出響應。在Http協議的約束下,不同的瀏覽器才能和不同的伺服器實現正常通信!

F. java程序裡面指定協議ssl和tsl的區別

最新版本的TLS(Transport Layer Security,傳輸層安全協議)是IETF(Internet Engineering Task Force,Internet工程任務組)制定的一種新的協議,它建立在SSL 3.0協議規范之上,是SSL 3.0的後續版本。在TLS與SSL3.0之間存在著顯著的差別,主要是它們所支持的加密演算法不同,所以TLS與SSL3.0不能互操作。
1.TLS與SSL的差異
1)版本號:TLS記錄格式與SSL記錄格式相同,但版本號的值不同,TLS的版本1.0使用的版本號為SSLv3.1。
2)報文鑒別碼:SSLv3.0和TLS的MAC演算法及MAC計算的范圍不同。TLS使用了RFC-2104定義的HMAC演算法。SSLv3.0使用了相似的演算法,兩者差別在於SSLv3.0中,填充位元組與密鑰之間採用的是連接運算,而HMAC演算法採用的是異或運算。但是兩者的安全程度是相同的。
3)偽隨機函數:TLS使用了稱為PRF的偽隨機函數來將密鑰擴展成數據塊,是更安全的方式。
4)報警代碼:TLS支持幾乎所有的SSLv3.0報警代碼,而且TLS還補充定義了很多報警代碼,如解密失敗(decryption_failed)、記錄溢出(record_overflow)、未知CA(unknown_ca)、拒絕訪問(access_denied)等。
5)密文族和客戶證書:SSLv3.0和TLS存在少量差別,即TLS不支持Fortezza密鑰交換、加密演算法和客戶證書。
6)certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息計算MD5和SHA-1散列碼時,計算的輸入有少許差別,但安全性相當。
7)加密計算:TLS與SSLv3.0在計算主密值(master secret)時採用的方式不同。
8)填充:用戶數據加密之前需要增加的填充位元組。在SSL中,填充後的數據長度要達到密文塊長度的最小整數倍。而在TLS中,填充後的數據長度可以是密文塊長度的任意整數倍(但填充的最大長度為255位元組),這種方式可以防止基於對報文長度進行分析的攻擊。
2.TLS的主要增強內容
TLS的主要目標是使SSL更安全,並使協議的規范更精確和完善。TLS 在SSL v3.0 的基礎上,提供了以下增強內容:
1)更安全的MAC演算法;
2)更嚴密的警報;
3)「灰色區域」規范的更明確的定義;

3.TLS對於安全性的改進

1)對於消息認證使用密鑰散列法:TLS 使用「消息認證代碼的密鑰散列法」(HMAC),當記錄在開放的網路(如網際網路)上傳送時,該代碼確保記錄不會被變更。SSLv3.0還提供鍵控消息認證,但HMAC比SSLv3.0使用的(消息認證代碼)MAC 功能更安全。
2)增強的偽隨機功能(PRF):PRF生成密鑰數據。在TLS中,HMAC定義PRF。PRF使用兩種散列演算法保證其安全性。如果任一演算法暴露了,只要第二種演算法未暴露,則數據仍然是安全的。
3)改進的已完成消息驗證:TLS和SSLv3.0都對兩個端點提供已完成的消息,該消息認證交換的消息沒有被變更。然而,TLS將此已完成消息基於PRF和HMAC值之上,這也比SSLv3.0更安全。
4)一致證書處理:與SSLv3.0不同,TLS試圖指定必須在TLS之間實現交換的證書類型。
5)特定警報消息:TLS提供更多的特定和附加警報,以指示任一會話端點檢測到的問題。TLS還對何時應該發送某些警報進行記錄。

G. 怎樣才能通過TCP傳輸協議用Java實現文件的

服務端監聽:ServerSocket server=new ServerSocket(port);//port:綁定的埠號
Socket client=server.accept();//監聽埠,一旦取得連接則獲得客戶端的socket連接對象client

客戶端: Socket s=new Socket(ip,port);//要連接的伺服器的ip以及埠號

如果正常連接上之後,socket的對象可以獲得InputStream和OutputStreame,然後就可以進行通信了

完成通信之後,執行socket對象的close()方法關閉連接,完成一次完整的socket連接

H. java相關網路協議佔用內存。

那東西的增加大來部分消耗在緩自存上,隨著程序的運行各種緩存機制什麼的都會把一些東西放在內存中,但是這些資源因為是tomcat中的項目緩存的,所以也不會釋放,目前最快的方法就是一鍵加速了,雙擊下360的那個加速球就行了。另外就是優化代碼,垃圾回收了。盡量少用全局變數,不用的變數能釋放就釋放,對象能銷毀就銷毀。

I. 如何實現java解析網路協議報文

普通參數:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

文件參數:
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

參數實體的最後一行是: --加上boundary加上--,最後換行,這里的 格式即為: --OCqxMF6-JxtxoMDHmoG5W5eY9MGRsTBp--。

模擬文件上傳請求
public static void uploadFile(String fileName) {
try {
// 換行符
final String newLine = "\r\n";
final String boundaryPrefix = "--";
// 定義數據分隔線
String BOUNDARY = "========7d4a6d158c9";
// 伺服器的域名
URL url = new URL("www.myhost.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 設置為POST情
conn.setRequestMethod("POST");
// 發送POST請求必須設置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 設置請求頭參數
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// 上傳文件
File file = new File(fileName);
StringBuilder sb = new StringBuilder();
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(newLine);
// 文件參數,photo參數名可以隨意修改
sb.append("Content-Disposition: form-data;name=\"photo\";filename=\"" + fileName
+ "\"" + newLine);
sb.append("Content-Type:application/octet-stream");
// 參數頭設置完以後需要兩個換行,然後才是參數內容
sb.append(newLine);
sb.append(newLine);
// 將參數頭的數據寫入到輸出流中
out.write(sb.toString().getBytes());
// 數據輸入流,用於讀取文件數據
DataInputStream in = new DataInputStream(new FileInputStream(
file));
byte[] bufferOut = new byte[1024];
int bytes = 0;
// 每次讀1KB數據,並且將文件數據寫入到輸出流中
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
// 最後添加換行
out.write(newLine.getBytes());
in.close();
// 定義最後數據分隔線,即--加上BOUNDARY再加上--。
byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine)
.getBytes();
// 寫上結尾標識
out.write(end_data);
out.flush();
out.close();
// 定義BufferedReader輸入流來讀取URL的響應
// BufferedReader reader = new BufferedReader(new InputStreamReader(
// conn.getInputStream()));
// String line = null;
// while ((line = reader.readLine()) != null) {
// System.out.println(line);
// }
} catch (Exception e) {
System.out.println("發送POST請求出現異常!" + e);
e.printStackTrace();
}
}

J. java.sql.SQLException: 違反協議

違反協議錯誤,一般都是JDBC的驅動出錯了,你檢查一下連接資料庫的JDBC驅動是否正確。
Oracle 11G的JDBC驅動並不能用於Oracle 10G Release 2的資料庫,因此必須使用Oracle 10G Release2的JDBC驅動,這個驅動可以在Oracle安裝目錄下找到。在Oracle安裝目錄下找一個JDBC的目錄,其下有一個LIB目錄,拷貝其中ojdbc14.jar文件就可以了。

熱點內容
美發店認證 發布:2021-03-16 21:43:38 瀏覽:443
物業糾紛原因 發布:2021-03-16 21:42:46 瀏覽:474
全國著名不孕不育醫院 發布:2021-03-16 21:42:24 瀏覽:679
知名明星確診 發布:2021-03-16 21:42:04 瀏覽:14
ipad大專有用嗎 發布:2021-03-16 21:40:58 瀏覽:670
公務員協議班值得嗎 發布:2021-03-16 21:40:00 瀏覽:21
知名書店品牌 發布:2021-03-16 21:39:09 瀏覽:949
q雷授權碼在哪裡買 發布:2021-03-16 21:38:44 瀏覽:852
圖書天貓轉讓 發布:2021-03-16 21:38:26 瀏覽:707
寶寶水杯品牌 發布:2021-03-16 21:35:56 瀏覽:837