成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

一個(gè)簡單的支持多并發(fā)的socket服務(wù)/客戶端

Honwhy / 1946人閱讀

摘要:代碼實(shí)戰(zhàn)啟動(dòng)類服務(wù)啟動(dòng)類啟動(dòng)類線程監(jiān)聽端口服務(wù)類監(jiān)聽端口主服務(wù)監(jiān)聽端口服務(wù)端啟動(dòng)成功,端口服務(wù)端啟動(dòng)失敗線程模式,防止注釋啟動(dòng)客戶端接受服務(wù)端異??蛻舳私尤氡O(jiān)聽類客戶端接入監(jiān)聽類數(shù)據(jù)連接值新客戶端接入對客戶端的業(yè)務(wù)處理,接收并重寫回去客戶

代碼實(shí)戰(zhàn) ServerBoot啟動(dòng)類
package com.example.demo.server;

/**
 * @author  MySelf
 * @create  2018/9/29
 * @desc 服務(wù)啟動(dòng)類
 **/
public class ServerBoot {

    private static final int PORT = 8000;

    /**
     * 啟動(dòng)Server類線程
     * @param args
     */
    public static void main(String[] args) {
        Server server = new Server(PORT);
        server.start();
    }

}
Server監(jiān)聽端口服務(wù)類
package com.example.demo.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author  MySelf
 * @create  2018/9/29
 * @desc Server監(jiān)聽端口主服務(wù)
 **/
public class Server {

    private ServerSocket serverSocket;

    /**
     * 監(jiān)聽端口
     * @param port
     */
    public Server(int port){
        try {
            this.serverSocket = new ServerSocket(port);
            System.out.println("服務(wù)端啟動(dòng)成功,端口:"+port);
        }catch (IOException e){
            System.out.println("服務(wù)端啟動(dòng)失敗");
        }
    }

    /**
     * 線程模式,防止注釋
     */
    public void start(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                doStart();
            }
        }).start();
    }

    /**
     * 啟動(dòng)客戶端接受
     */
    private void doStart() {
        while (true){
            try {
                Socket client = serverSocket.accept();
                new ClientHandler(client).start();
            }catch (IOException e){
                System.out.println("服務(wù)端異常");
            }
        }
    }

}
ClientHandler客戶端接入監(jiān)聽類
package com.example.demo.server;

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

/**
 * @author  MySelf
 * @create  2018/9/29
 * @desc 客戶端接入監(jiān)聽類
 **/
public class ClientHandler {

    /** 數(shù)據(jù)連接值 */
    public static final int MAX_DATA_LEN = 1024;
    private final Socket socket;

    public ClientHandler(Socket socket){
        this.socket = socket;
    }

    public void start(){
        System.out.println("新客戶端接入");
        new Thread(new Runnable() {
            @Override
            public void run() {
                doStart();
            }
        }).start();
    }

    /**
     * 對客戶端的業(yè)務(wù)處理,接收并重寫回去
     */
    private void doStart(){
        try {
            InputStream inputStream = socket.getInputStream();
            while (true){
                byte[] data = new byte[MAX_DATA_LEN];
                int len;
                while((len = inputStream.read(data)) != -1){
                    String message = new String(data,0,len);
                    System.out.println("客戶端傳來消息:"+message);
                    socket.getOutputStream().write(data);
                }
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

}
Client客戶端啟動(dòng)類
package com.example.demo.client;

import java.io.IOException;
import java.net.Socket;

/**
 * @author  MySelf
 * @create  2018/9/29
 * @desc 客戶端啟動(dòng)類
 **/
public class Client {

    private static final String HOST = "127.0.0.1";
    private static final int PORT = 8000;
    private static final int SLEEP_TIME = 5000;

    public static void main(String[] args) throws IOException {

        final Socket socket = new Socket(HOST,PORT);

        /**
         * 客戶端啟動(dòng),定時(shí)向服務(wù)端發(fā)送數(shù)據(jù)
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("客戶端啟動(dòng)成功!");
                while (true){
                    try {
                        String message = "hello world";
                        System.out.println("客戶端發(fā)送數(shù)據(jù):"+message);
                        socket.getOutputStream().write(message.getBytes());
                    }catch (Exception e){
                        System.out.println("寫數(shù)據(jù)出錯(cuò)!");
                    }
                    sleep();
                }
            }
        }).start();
    }

    private static void sleep() {
        try {
            Thread.sleep(SLEEP_TIME);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}
相關(guān)實(shí)戰(zhàn)

GitHub項(xiàng)目:基于Netty4與SpringBoot,聊天室WebSocket(文字圖片)、Iot物聯(lián)網(wǎng)-TCP/IP協(xié)議單片機(jī)通信,異步存儲(chǔ)聊天數(shù)據(jù)

如果本文對你有所幫助,歡迎關(guān)注技術(shù)公眾號。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/77348.html

相關(guān)文章

  • PHP并發(fā)IO編程之路

    摘要:下文如無特殊聲明將使用進(jìn)程同時(shí)表示進(jìn)程線程。收到數(shù)據(jù)后服務(wù)器程序進(jìn)行處理然后使用向客戶端發(fā)送響應(yīng)?,F(xiàn)在各種高并發(fā)異步的服務(wù)器程序都是基于實(shí)現(xiàn)的,比如。 并發(fā) IO 問題一直是服務(wù)器端編程中的技術(shù)難題,從最早的同步阻塞直接 Fork 進(jìn)程,到 Worker 進(jìn)程池/線程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因?yàn)橛袕?qiáng)大的 LAMP 框架,對這類底層方面的知識(shí)知之甚少,本文目的就是詳細(xì)介...

    Riddler 評論0 收藏0
  • Nginx實(shí)現(xiàn)內(nèi)參

    摘要:子進(jìn)程啟動(dòng)后監(jiān)控維護(hù)區(qū)。每來一個(gè)新的連接都會(huì)觸發(fā)新的事件,這些事件送給內(nèi)的狀態(tài)機(jī)來處理。大部分的邏輯上都有這樣的狀態(tài)機(jī),只是實(shí)現(xiàn)方式不一樣。另外通過進(jìn)程綁定技術(shù)可以進(jìn)一步減少上下文切換和失效等系統(tǒng)開銷。 Nginx在web開發(fā)者眼中就是高并發(fā)高性能的代名詞,其基于事件的架構(gòu)也被眾多開發(fā)者效仿。我從Nginx的網(wǎng)站找到一篇技術(shù)文章將Nginx是怎樣實(shí)現(xiàn)的,文章是Nginx的產(chǎn)品老大Owe...

    learn_shifeng 評論0 收藏0
  • 物聯(lián)網(wǎng)高并發(fā)編程之單臺(tái)服務(wù)器最大并發(fā)TCP連接數(shù)

    摘要:對端,通過增加內(nèi)存修改最大文件描述符個(gè)數(shù)等參數(shù),單機(jī)最大并發(fā)連接數(shù)超過萬甚至上百萬是沒問題的,國外公司在產(chǎn)品環(huán)境中已做到萬并發(fā) [TOC] 前言 曾幾何時(shí)我們還在尋求網(wǎng)絡(luò)編程中C10K問題的解決方案,但是現(xiàn)在從硬件和操作系統(tǒng)支持來看單臺(tái)服務(wù)器支持上萬并發(fā)連接已經(jīng)沒有多少挑戰(zhàn)性了。 我們先假設(shè)單臺(tái)服務(wù)器最多只能支持萬級并發(fā)連接,其實(shí)對絕大多數(shù)應(yīng)用來說已經(jīng)遠(yuǎn)遠(yuǎn)足夠了,但是對于一些擁有很大用...

    leap_frog 評論0 收藏0
  • 如何打造在線直播間(技術(shù)貼)

    摘要:背景當(dāng)下視頻直播如此紅火,打造一個(gè)在線直播間涉及到哪些技術(shù)呢視頻直播由主播的直播端以及觀眾的觀看端組成。保持心跳斷開重連快速搭建在線直播間按前文所述,搭建直播間有非常多的細(xì)節(jié)需要考慮,包括采集推流分發(fā)播放體驗(yàn)優(yōu)化聊天室性能調(diào)優(yōu)等。 背景 當(dāng)下視頻直播如此紅火,打造一個(gè)在線直播間涉及到哪些技術(shù)呢? 視頻直播由主播的直播端以及觀眾的觀看端組成。一個(gè)簡單的觀看端最起碼應(yīng)包含播放器以及聊天室。...

    sugarmo 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<