1.普通Socket的用法

Java中網(wǎng)絡(luò)通信是通過Socket實(shí)現(xiàn)的援奢。
Socket分為ServerSocket和Socket兩大類蓖谢。
ServerSocket用于服務(wù)端根吁,通過accept方法監(jiān)聽請求片林,監(jiān)聽到請求后返回Socket,Socket用于具體完成數(shù)據(jù)傳輸端盆;客戶端通過Socket直接發(fā)起請求并傳輸數(shù)據(jù)。

ServerSocket的使用方法:
  1. 創(chuàng)建ServerSocket费封。ServerSocket有5個(gè)構(gòu)造方法焕妙,其中ServerSocket(int port)用起來最方便,只需一個(gè)端口號就可以了弓摘。
  2. 調(diào)用accept方法進(jìn)行監(jiān)聽焚鹊。accept方法是阻塞方法,即調(diào)用accept方法后程序會停下來等待請求韧献,在接收到請求之前末患,程序不會往下走,當(dāng)接收到請求后accept方法會返回一個(gè)Socket.
  3. 使用accept返回的Socket進(jìn)行通信锤窑。
ServerSocket的簡單示例:
package Ex;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {
  public static void main(String[] args) {
    try {
        // 1.創(chuàng)建一個(gè)ServerSocket監(jiān)聽8080端口
        ServerSocket server = new ServerSocket(8080);
        // 2.等待請求
        Socket socket = server.accept();
        // 3.接收到請求后使用socket進(jìn)行通信璧针,創(chuàng)建BufferedReader用于讀取數(shù)據(jù)
        BufferedReader is = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));
        String line = is.readLine();
        System.out.println("received from client: " + line);
        // 創(chuàng)建PrintWriter,用于發(fā)送數(shù)據(jù)
        PrintWriter pw = new PrintWriter(socket.getOutputStream());
        pw.println("received data :" + line);
        pw.flush();
        // 關(guān)閉資源
        pw.close();
        is.close();
        socket.close();
        server.close();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
  }
}

在上面的TestServer中,先創(chuàng)建ServerSocket渊啰,然后調(diào)用accpet等待請求探橱,當(dāng)接收到請求后,用返回的Socket創(chuàng)建BufferedReader和PrintWriter進(jìn)行接收和發(fā)送數(shù)據(jù)绘证,Reader接收到的數(shù)據(jù)保存到line中隧膏,在控制臺打印,Writer發(fā)送數(shù)據(jù)給客戶端嚷那。數(shù)據(jù)傳輸完成后胞枕,關(guān)閉連接;

Socket的簡單示例:
package Ex;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TestClient {
  public static void main(String[] args) {
    String msg = "Client Data.";
    try {
        //創(chuàng)建一個(gè)Socket车酣,跟本機(jī)的8080端口連接
        Socket socket = new Socket("127.0.0.1",8080);
        //使用Socket創(chuàng)建PrintWriter和BufferedReader進(jìn)行讀寫數(shù)據(jù)
        PrintWriter pw = new PrintWriter(socket.getOutputStream());
        //讀取數(shù)據(jù)
        BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //發(fā)送數(shù)據(jù)
        pw.println(msg);
        pw.flush();
        //接收數(shù)據(jù)
        String line = is.readLine();
        System.out.println("received from server :"+line);
        //關(guān)閉資源
        is.close();
        pw.close();
        socket.close();
        
        
    } catch (Exception e) {
        // TODO: handle exception
    }
  }
}

首先創(chuàng)建一個(gè)Socket,采用Socket(String host,int port)構(gòu)造方法曲稼,把主機(jī)地址和端口號傳入進(jìn)去,Socket就會跟服務(wù)端建立連接湖员,創(chuàng)建完Socket,再創(chuàng)建Reader和Writer進(jìn)行數(shù)據(jù)傳輸贫悄,數(shù)據(jù)傳輸完成后,關(guān)閉連接釋放資源即可娘摔。
??先啟動(dòng)TestServer,然后再啟動(dòng)TestClient就可以完成一次通信窄坦。Server端控制臺輸出:received from client:Client Date;Client端控制臺輸出:received from server:received data:Client data;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸭津,更是在濱河造成了極大的恐慌彤侍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逆趋,死亡現(xiàn)場離奇詭異盏阶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)闻书,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門名斟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人魄眉,你說我怎么就攤上這事砰盐。” “怎么了坑律?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵岩梳,是天一觀的道長。 經(jīng)常有香客問我晃择,道長冀值,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任藕各,我火速辦了婚禮池摧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘激况。我一直安慰自己作彤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布乌逐。 她就那樣靜靜地躺著竭讳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浙踢。 梳的紋絲不亂的頭發(fā)上绢慢,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機(jī)與錄音洛波,去河邊找鬼胰舆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蹬挤,可吹牛的內(nèi)容都是我干的缚窿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼焰扳,長吁一口氣:“原來是場噩夢啊……” “哼倦零!你這毒婦竟也來了误续?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤扫茅,失蹤者是張志新(化名)和其女友劉穎蹋嵌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葫隙,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栽烂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了停蕉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愕鼓。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钙态,死狀恐怖慧起,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情册倒,我是刑警寧澤蚓挤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站驻子,受9級特大地震影響灿意,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崇呵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一缤剧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧域慷,春花似錦荒辕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叠骑,卻和暖如春李皇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宙枷。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工掉房, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慰丛。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓卓囚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親璧帝。 傳聞我的和親對象是個(gè)殘疾皇子捍岳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1 網(wǎng)絡(luò)編程----TCPNo24 【 public class Server { public static...
    征程_Journey閱讀 1,257評論 0 4
  • 愛情的難題 沒有公式 沒有定律 千百人千百樣 我們都更像一顆棋 深陷迷局 唯有做好自己 不至于被情困 被心迷 有天...
    獅女柔心_Nicole陶閱讀 114評論 0 1
  • 大二了富寿,時(shí)間過得好快。 以前中學(xué)的時(shí)候?qū)W別人故作老態(tài)锣夹,感慨時(shí)光飛逝页徐。到現(xiàn)在不知不覺大二了,回憶以前走的路银萍,發(fā)生的事...
    騶虞閱讀 335評論 0 2
  • 日常生活中,一提到顏色提到顏色贴唇,更多的是對顏色的感覺搀绣。比如,紅色代表熱情戳气,奔放链患。藍(lán)色代表憂郁深沉。每一種顏色會在心...
    影子倒了閱讀 5,687評論 1 7
  • 3.開始找證據(jù) 弗蘭克走向了那處荒涼的遺址處瓶您,開始了尋找證據(jù)麻捻,不過這都有十年之久,還怎么找呢呀袱?這恐怕是他心里最大的...
    沙塢閱讀 239評論 0 2