1. 程式人生 > >java中各種通訊的例項(socket、http等)

java中各種通訊的例項(socket、http等)

socket通訊的例項:

服務端:

/**
 * <b>專案名:</b>複習總結<br/>
 * <b>包   名:</b>socket<br/>
 * <b>檔名:</b>Server.java<br/>
 * <b>版本資訊:</b>1.0.0<br/>
 * <b>日期:</b>2014-10-22-上午9:45:20<br/>
 * 
 */
package socket;


import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 * <b>類   名:</b>Server<br/>
 * <b>類描述:</b><br/>
 * <b>建立人:</b>hebl<br/>
 * <b>建立時間:</b>2014-10-22 上午9:45:20<br/>
 * <b>修改人:</b>hebl<br/>
 * <b>修改時間:</b>2014-10-22 上午9:45:20<br/>
 * <b>修改備註:</b><br/>
 *
 * @version 1.0.0<br/>
 * 
 */
public class Server {


private final static Logger logger = Logger.getLogger(Server.class.getName());

public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);//設定埠號


while (true) {
Socket socket = server.accept();// 等待服務的請求
invoke(socket);
}
}


private static void invoke(final Socket socket) throws IOException {
new Thread(new Runnable() {
public void run() {
ObjectInputStream is = null;
ObjectOutputStream os = null;
try {
is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
os = new ObjectOutputStream(socket.getOutputStream());


Object obj = is.readObject();
User user = (User)obj;
System.out.println("user: " + user.getUserName() + "/" + user.getPassWord());


user.setUserName(user.getUserName() + "_new");
user.setPassWord(user.getPassWord() + "_new");


os.writeObject(user);
os.flush();
} catch (IOException ex) {
logger.log(Level.SEVERE, null, ex);
} catch(ClassNotFoundException ex) {
logger.log(Level.SEVERE, null, ex);
} finally {
try {
is.close();
} catch(Exception ex) {}
try {
os.close();
} catch(Exception ex) {}
try {
socket.close();
} catch(Exception ex) {}
}
}
}).start();
}
}

客戶端:

/**
 * <b>專案名:</b>複習總結<br/>
 * <b>包   名:</b>socket<br/>
 * <b>檔名:</b>Client.java<br/>
 * <b>版本資訊:</b>1.0.0<br/>
 * <b>日期:</b>2014-10-22-上午9:45:40<br/>
 * 
 */
package socket;


import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 * <b>類   名:</b>Client<br/>
 * <b>類描述:</b><br/>
 * <b>建立人:</b>hebl<br/>
 * <b>建立時間:</b>2014-10-22 上午9:45:40<br/>
 * <b>修改人:</b>hebl<br/>
 * <b>修改時間:</b>2014-10-22 上午9:45:40<br/>
 * <b>修改備註:</b><br/>
 *
 * @version 1.0.0<br/>
 * 
 */
public class Client {

private final static Logger logger = Logger.getLogger(Client.class.getName());

public static void main(String[] args) throws Exception {
for (int i = 0; i < 100; i++) {
Socket socket = null;
ObjectOutputStream os = null;
ObjectInputStream is = null;

try {
socket = new Socket("localhost", 10000);

os = new ObjectOutputStream(socket.getOutputStream());
User user = new User("user_" + i, "password_" + i);
os.writeObject(user);
os.flush();

is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
Object obj = is.readObject();
if (obj != null) {
user = (User)obj;
System.out.println("user: " + user.getUserName() + "/" + user.getPassWord());
}
} catch(IOException ex) {
logger.log(Level.SEVERE, null, ex);
} finally {
try {
is.close();
} catch(Exception ex) {}
try {
os.close();
} catch(Exception ex) {}
try {
socket.close();
} catch(Exception ex) {}
}
}
}
}

http請求:

1、get方式請求

private static String getHtml(String url) {


String urlString = url;
if (!url.startsWith("http://")) {
urlString = "http://" + url;
}
WebClient webClient;
String html = null;
webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
webClient.setJavaScriptEnabled(false);
webClient.setCssEnabled(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.setTimeout(60000);
webClient.setThrowExceptionOnScriptError(false);
HtmlPage page;
try {
//會有型別轉換錯誤異常
page = (HtmlPage) webClient.getPage(urlString);
html = page.asXml();
} catch (Exception e) {
System.out.println("此url不合法" + url+e);
}
return html;
}

2、post方式請求

/**
* 使用post方式傳送請求
* @param url
* @param params
* @return
*/
public static Document post(String url, List<NameValuePair> params) {
// POST的URL
HttpPost httppost = new HttpPost(url);
String result = "";
// 新增引數
try {
httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
// 設定編碼
HttpResponse response = new DefaultHttpClient().execute(httppost);
// 傳送Post,並返回一個HttpResponse物件
// Header header = response.getFirstHeader("Content-Length");
// String Length=header.getValue();
// 上面兩行可以得dfkjb
if (response.getStatusLine().getStatusCode() == 200) {// 如果狀態碼為200,就是正常返回
result += EntityUtils.toString(response.getEntity());
// 得到返回的字串
// 列印輸出
// 如果是下載檔案,可以用response.getEntity().getContent()返回InputStream
}
} catch (Exception e) {
e.printStackTrace();
}
return Jsoup.parse(result) ;
}

相關推薦

java各種通訊例項sockethttp

socket通訊的例項: 服務端: /**  * <b>專案名:</b>複習總結<br/>  * <b>包   名:</b>socket<br/>  * <b>檔名:</b>Se

CSS各種選擇器ID的優先順序

按權重: 內聯樣式:權重+1000 ID選擇器:權重+100 類、偽類和屬性選擇器:權重+10 選擇器中的各個元素(即標籤)和偽元素:權重+1 結合符合通配選擇器:權重+0 CSS樣式的表現取權重最

Java各種集合總結

分享圖片 link 抽象類 解決 集合 1.0 分享 arr 抽象 (一)集合與數組 數組:(存基本數據類型)-->存對象的一種容器,長度固定,【不適合在對象數量未知的情況下使用】 集合:(存對象,對象類型可以不一樣)-->長度可變,可在多數情況下使用。 (二)

JAVA各種排序演算法冒泡選擇快排二分法詳細過程

掌握演算法是作為程式設計師的基本必備素質,而排序也是各種演算法的基礎,雖說java幫我們封裝好了各種資料型別的排序方法,可是我們還是要知道他的原理,下面我就說幾種常用的演算法及原理; 氣泡排序: 原理:相鄰元素兩兩比較,大的往後放,每一次完畢,最大值出現在了最大索引處; 下面我們

Java四種引用

1. 強引用(StrongReference)  強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足的問題。 2. 軟引用(SoftR

ArcGIS各種合併要素UnionMergeAppendDissolve的異同點分析

ArcGIS中將兩個要素類合併成一個要素有Union、Dissolve、Append、Merge等,在Arctoolbox中均有相應工具,但功能上有所不同:Union:合併輸入要素類到新的要素類中。圖形:union只能合併polygon型別的要素類。兩個要素類合併時會處理相交

java的字串型別StringStringBufferStringBuilder

一、首先來說一下JVM相關的一些知識 我們先來了解一下JVM記憶體中的棧(stack)、堆(heap)和方法區:  棧中儲存的是:基本資料型別的變數、物件的引用、函式呼叫的現場。  堆中儲存的是:通過new關鍵字和構造器建立的物件。堆是垃圾收集器管理的主要區

Network——Socket網路通訊機制以及實現舉例TCPUDP

1.  網路通訊與Socket前言TCP/IP協議族中網路層的IP地址可以唯一標識網路中的主機,而傳輸層的埠可以唯一標識主機中的應用程式。Socket通常也稱作"套接字",用於描述IP地址和埠,是一個通

Java的資料儲存常量池)

原文轉自http://bbs.itheima.com/thread-9597-1-1.html 1.暫存器:最快的儲存區, 由編譯器根據需求進行分配,我們在程式中無法控制。 2.棧:存放基本型別的變數資料和物件的引用,但物件本身不存放在棧中,而是存放在堆(new 出來的物件)

SQL各種Join語句leftrightfullinner的區別

iamlaosong文 實際工作中常常需要將多個表的查詢結果合成的一個查詢中,我一般採用join語句進行連線,用的最多的就是left join,這麼多join的差別是什麼呢?簡單的說就是最終結果以誰為

Java讀取配置檔案propertiesxml

1. 利用java.util提供的工具類Properties       - 首先我這邊有個file.properties檔案       - 然後去讀取這個檔案

java基礎 第十三章HashMapServlet介紹

submit AS dopost() next get() put ava cti hello 一、HashMap 1.格式:HashMap<類型,類型> map = new HashMap<類型,類型>(); 例:HashM

JAVA只有值傳遞用內存理解

合並 形參 java 註意 拷貝 引用數據類型 基本類 壓棧 數據 剛剛上路的小夥盤們牢記哦,JAVA只有值傳遞,八大基本類型傳遞的是值。所有當調用帶有基本類型參數的方法時會把這個方法和他的局部變量一起合並成棧幀然後壓棧,註意方法的參數也是這個方法的局部變量,所以當實參將值

Java使用elasticsearch搜尋引擎實現簡單修改操作

以下的操作環境為:jdk:1.8;elasticsearch:5.2.0 maven架包下載座標為: <dependency> <groupId>org.elasticsearch.plugin</groupId> <artifactId&g

Java2 5D遊戲斜45度角的設計與實現 1

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

【leetcode】從排序陣列刪除重複項CPython解答

題目: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該

201711671125 Java多執行緒例項第十一週

建立3個售票視窗同時開始銷售10張票。 原始碼: public class One {     public static void main(String[] args) {         Ti

Java 原子操作類詳解AtomicIntegerAtomicIntegerArray

當程式更新一個變數時,如果多執行緒同時更新這個變數,可能得到期望之外的值,比如變數i=1,A執行緒更新i+1,B執行緒也更新i+1,經過兩個執行緒操作之後可能i不等於3,而是等於2。因為A和B執行緒在更新變數i的時候拿到的i都是1,這就是執行緒不安全的更新操作,通常我們會使

Java各種打包方式JAR/WAR/EAR/CAR

JAR (Java Archive file)包含內容:class、properties檔案,是檔案封裝的最小單元;包含Java類的普通庫、資源(resources)、輔助檔案(auxiliary files)等部署檔案 : application-client.xm

HTTPS 通訊流程簽名數字證書

一、簡介 前一篇文章,我總結了下,如何部署https服務,開通ssl通道。但是對於https整個通訊流程還有許多疑惑的地方,所以花了好幾天看了各種資料,其中有的資料也誤導了我,導致我走了些彎路。接下來我就來總結一下,幫助初學者理清https通訊流程。 二、名詞解釋 1、簽名