中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

12.6-全棧Java筆記:Java網絡編程(四)

發布時間:2020-07-13 03:50:05 來源:網絡 閱讀:280 作者:全棧Java 欄目:建站服務器

上節回顧:在學習了Socket建立客戶端和服務器雙向交流后,我們發現它的問答形式不夠靈活。

本節課我們講解如何在服務器和客戶端之間實現聊天室~

需要思考的問題:

服務器端:一個線程專門發送消息,一個線程專門接收消息。

客戶端:一個線程專門發送消息,一個線程專門接收消息。

除了消化這段代碼外,還需要思考,怎么實現一個聊天室!(難度較大!!)

【示例1】聊天室服務器端

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;

 

public class ChatServer {

   

    public static void main(String[]   args)  {

       ServerSocket server=null;

       Socket socket=null;

       BufferedReader in=null;

       try {

           server = new ServerSocket(8888);

           socket=server.accept();

           new ServerThread(socket).start();

          

           //main線程負責讀取客戶端發來的信息

           in=new BufferedReader(new   InputStreamReader(socket.getInputStream()));

           while(true){

              String str=in.readLine();

              System.out.println("客戶端說:"+str);

           }

       } catch (IOException e) {

           e.printStackTrace();

       }finally{

           try {

              in.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

           try {

              socket.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

          

       }

          

    }

}

 

/**

 * 專門向客戶端發送消息的線程

 * @author Administrator

 *

 */

class ServerThread extends Thread {

    Socket ss;

    BufferedWriter out;

    BufferedReader br;

    public ServerThread(Socket ss){

       this.ss = ss;

       try {

           out=new BufferedWriter(new   OutputStreamWriter(ss.getOutputStream()));

           br = new BufferedReader(new   InputStreamReader(System.in));      

       } catch (IOException e) {

           e.printStackTrace();

       }

    }

    public void run(){

       try {

           while(true){

              String str2 = br.readLine();

              out.write(str2+"\n");

              out.flush();  

           }

       } catch (IOException e) {

           e.printStackTrace();

       }finally{

           try {

              out.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

           try {

              br.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

       }

      

    }

}

 

【示例2】聊天室客戶端

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

 

public class ChatClient {

    public static void main(String[] args) {

       Socket  socket = null;  

       BufferedReader in = null;

       try {

           socket=new Socket(InetAddress.getByName("192.168.1.32"),8888);  

           new ClientThread(socket).start();

           in=new BufferedReader(new   InputStreamReader(socket.getInputStream()));

 

           //main線程負責接收服務器發來的信息

           while(true){

               System.out.println("服務器說:"+in.readLine());  

           }

          

       } catch (UnknownHostException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }finally{

           try {

              socket.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

          

           try {

              in.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

       }

      

    }

}  

 

/**

 * 用于向服務器發送消息

 * @author Administrator

 *

 */

class ClientThread extends Thread{

    Socket s;

    BufferedWriter out;

    BufferedReader wt;

    public ClientThread(Socket s){

       this.s = s;

       try {

           out=new BufferedWriter(new   OutputStreamWriter(s.getOutputStream()));

           wt=new BufferedReader(new   InputStreamReader(System.in));

       } catch (IOException e) {

           e.printStackTrace();

       }

      

    }

    public void run(){

           try {

              while(true){

                  String str = wt.readLine();

                  out.write(str+"\n" );

                  out.flush();

              }

           } catch (IOException e) {

              e.printStackTrace();

           }finally{

              try {

                  wt.close();

              } catch (IOException e) {

                  e.printStackTrace();

              }

               try {

                  out.close();

              } catch (IOException e) {

                  e.printStackTrace();

              }

           }

    }

}





「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。


 筆記包含從淺入深的六大部分:

 A-Java入門階段

 B-數據庫從入門到精通

 C-手刃移動前端和Web前端

 D-J2EE從了解到實戰

 E-Java高級框架精解

 F-Linux和Hadoop 




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贺州市| 正宁县| 商城县| 普定县| 宣化县| 盐池县| 台中市| 新源县| 清镇市| 罗源县| 阜康市| 福清市| 宁海县| 宾川县| 桐城市| 山阳县| 响水县| 常德市| 三都| 岳西县| 吉木萨尔县| 鲁甸县| 肃宁县| 彰武县| 营口市| 临汾市| 文安县| 平遥县| 左权县| 延边| 儋州市| 浠水县| 闵行区| 阳曲县| 宁河县| 镇原县| 丰都县| 香格里拉县| 呈贡县| 阳山县| 西丰县|