serverSocket

public class TCPEchoServer {
    private static final int BUFSIZE = 32;

    /**
         * @param args
       */
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            // 從控制臺(tái)獲取需要監(jiān)聽的端口號(hào)
            if (args.length != 1)
                throw new IllegalArgumentException("Parameter(s):<Port>");
            // 獲取端口號(hào)
            int servPort = Integer.parseInt(args[0]);
            // 實(shí)例化一個(gè)ServerSocket對(duì)象實(shí)例
            ServerSocket servSocket = new ServerSocket(servPort);
            System.out.println(MessageFormat.format("開始啟動(dòng)監(jiān)聽扩所,端口號(hào):{0}", args[0]));

            // 初始接收數(shù)據(jù)的總字節(jié)數(shù)
            int recvMsgSize;
            // 接收數(shù)據(jù)的緩沖區(qū)
            byte[] receiveBuf = new byte[BUFSIZE];

            // 循環(huán)迭代围详,監(jiān)聽端口號(hào),處理新的連接請(qǐng)求
            while (true) {
                // 阻塞等待,每接收到一個(gè)請(qǐng)求就創(chuàng)建一個(gè)新的連接實(shí)例
                Socket clntSocket = servSocket.accept();
                // 獲取連接的客戶端的 SocketAddress
                SocketAddress clientAddress = clntSocket.getRemoteSocketAddress();
                // 打印輸出連接客戶端地址信息
                System.out.println("Handling client at" + clientAddress);
                // 從客戶端接收數(shù)據(jù)的對(duì)象
                InputStream in = clntSocket.getInputStream();
                // 向客戶端發(fā)送數(shù)據(jù)的對(duì)象
                OutputStream out = clntSocket.getOutputStream();
                // 讀取客戶端發(fā)送的數(shù)據(jù)后祖屏,再發(fā)送到客戶端
                while ((recvMsgSize = in.read(receiveBuf)) != -1) {
                    out.write(receiveBuf, 0, recvMsgSize);
                }
                // 客戶端關(guān)閉連接時(shí)助赞,關(guān)閉連接
                System.out.println(" 客戶端關(guān)閉連接");
                clntSocket.close();
            }

        }

}

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;

public class TCPEchoClient {
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        // 判斷從控制臺(tái)接受的參數(shù)是否正確
        if ((args.length < 2) || (args.length > 3))
            throw new IllegalArgumentException("Parameter(s):<Server><Word>[<Port>]]");
        // 獲取服務(wù)器地址
        String server = args[0];
        // 獲取需要發(fā)送的信息
        byte[] data = args[1].getBytes();
        // 如果有三個(gè)從參數(shù)那么就獲取發(fā)送信息的端口號(hào),默認(rèn)端口號(hào)為8099
        int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 8099;
        // 根據(jù)服務(wù)器地址和端口號(hào)實(shí)例化一個(gè)Socket實(shí)例
        Socket socket = new Socket(server, servPort);
        System.out.println("Connected to server...sending echo string");
        // 返回此套接字的輸入流袁勺,即從服務(wù)器接受的數(shù)據(jù)對(duì)象
        InputStream in = socket.getInputStream();
        // 返回此套接字的輸出流雹食,即向服務(wù)器發(fā)送的數(shù)據(jù)對(duì)象
        OutputStream out = socket.getOutputStream();
        // 向服務(wù)器發(fā)送從控制臺(tái)接收的數(shù)據(jù)
        out.write(data);
        // 接收數(shù)據(jù)的計(jì)數(shù)器,將寫入數(shù)據(jù)的初始偏移量
        int totalBytesRcvd = 0;
        // 初始化接收數(shù)據(jù)的總字節(jié)數(shù)
        int bytesRcvd;
        while (totalBytesRcvd < data.length) {
            // 服務(wù)器關(guān)閉連接期丰,則返回 -1,read方法返回接收數(shù)據(jù)的總字節(jié)數(shù)
            if ((bytesRcvd = in.read(data, totalBytesRcvd, data.length - totalBytesRcvd)) == -1)
                throw new SocketException("與服務(wù)器的連接已關(guān)閉");
            totalBytesRcvd += bytesRcvd;
        }
        // 打印服務(wù)器發(fā)送來的數(shù)據(jù)
        System.out.println("Received:" + new String(data));
        // 關(guān)閉連接
        socket.close();

    }

}


服務(wù)端程序群叶,建立ServerSocket監(jiān)聽客戶端Socket的連接請(qǐng)求,并使用Socket獲取輸入輸出流钝荡。

public class Server{
      public static void main(String[] args){
              ServerSocket ss = new ServerSocket(3000);
               while(true){
                      Socket s= ss.accept();
                      PrintStream ps= new PrintStream (s.getOutputStream());
                      ps.println("您接收到服務(wù)器的消息");
                      ps.close();
                      s.close();
                       }
              }
}

客戶端使用socket建立與IP地址盖呼、指定端口的連接,并使用Socket獲取輸入流獲取數(shù)據(jù)化撕。

public static void main(String[] args) throws IOException{
        Socket socket=new Soket("127.0.0.1",30000);
        BufferedRead br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line=br.readLine();
        System.out.println("來自服務(wù)器的數(shù)據(jù): "+line);
        br.close();
        socket.close();
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末几晤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌极景,老刑警劉巖抵卫,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異憾朴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)喷鸽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門众雷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人做祝,你說我怎么就攤上這事砾省。” “怎么了混槐?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵编兄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我声登,道長(zhǎng)狠鸳,這世上最難降的妖魔是什么揣苏? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮件舵,結(jié)果婚禮上卸察,老公的妹妹穿的比我還像新娘。我一直安慰自己铅祸,他們只是感情好蛾派,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著个少,像睡著了一般洪乍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夜焦,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天壳澳,我揣著相機(jī)與錄音,去河邊找鬼茫经。 笑死巷波,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卸伞。 我是一名探鬼主播抹镊,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼荤傲!你這毒婦竟也來了垮耳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤遂黍,失蹤者是張志新(化名)和其女友劉穎终佛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雾家,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铃彰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芯咧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牙捉。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敬飒,靈堂內(nèi)的尸體忽然破棺而出邪铲,到底是詐尸還是另有隱情,我是刑警寧澤驶拱,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布霜浴,位于F島的核電站,受9級(jí)特大地震影響蓝纲,放射性物質(zhì)發(fā)生泄漏阴孟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一税迷、第九天 我趴在偏房一處隱蔽的房頂上張望永丝。 院中可真熱鬧,春花似錦箭养、人聲如沸慕嚷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喝检。三九已至,卻和暖如春撼泛,著一層夾襖步出監(jiān)牢的瞬間挠说,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工愿题, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留损俭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓潘酗,卻偏偏與公主長(zhǎng)得像杆兵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仔夺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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