欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)簡(jiǎn)易聊天功能

 更新時(shí)間:2022年09月15日 14:12:00   作者:數(shù)據(jù)結(jié)構(gòu)做不對(duì)  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)簡(jiǎn)易聊天功能的具體代碼,供大家參考,具體內(nèi)容如下

應(yīng)用客戶端和服務(wù)端通過(guò)控制臺(tái)的輸入輸出實(shí)現(xiàn)簡(jiǎn)易聊天功能

思路:

1.創(chuàng)建服務(wù)端類ChatServerThread和客戶端類ChatClientThradd

2.創(chuàng)建發(fā)送類Sendlmpl和接收類Receivelmpl

3.在服務(wù)端類中監(jiān)聽(tīng)8888號(hào)端口,并開啟發(fā)送和接收線程

4.在客戶端類中連接8888號(hào)端口并開啟發(fā)送和接收線程

5.在發(fā)送類中,開啟線程循環(huán),發(fā)送用戶輸入的信息

6.在接收類中,開啟線程循環(huán),接收網(wǎng)絡(luò)發(fā)送的數(shù)據(jù)

代碼實(shí)現(xiàn)

服務(wù)端ChatServerThread

package test;

import java.net.ServerSocket;
import java.net.Socket;

public class ?ChatServerThread{
? ? //服務(wù)端
? ? public static void main(String[] args) throws Exception{
? ? ? ? ServerSocket serverSocket = new ServerSocket(8888);
? ? ? ? //監(jiān)聽(tīng)8888號(hào)端口
? ? ? ? Socket socket = serverSocket.accept();
? ? ? ? //開啟發(fā)送和接收線程
? ? ? ? Sendlmpl sendlmpl=new Sendlmpl(socket);
? ? ? ? new Thread(sendlmpl).start();
? ? ? ? Receivelmpl receivelmpl=new Receivelmpl(socket);
? ? ? ? new Thread(receivelmpl).start();
? ? }
}

客戶端ChatClientThradd

package test;

import test.Receivelmpl;
import test.Sendlmpl;

import java.net.Socket;

public class ChatClientThradd {
? ? //客戶端
? ? public static void main(String[] args) throws Exception{
? ? ? ? //連接8888號(hào)端口
? ? ? ? Socket socket=new Socket("127.0.0.1",8888);
? ? ? ? //開啟發(fā)送和接收線程
? ? ? ? Sendlmpl sendlmpl=new Sendlmpl(socket);
? ? ? ? new Thread(sendlmpl).start();
? ? ? ? Receivelmpl receivelmpl=new Receivelmpl(socket);
? ? ? ? new Thread(receivelmpl).start();
? ? }
}

發(fā)送類Sendlmpl :

package test;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Sendlmpl implements Runnable {
? ? //發(fā)送類
? ? private Socket socket;

? ? public Sendlmpl(Socket socket) {
? ? ? ? this.socket = socket;
? ? }

? ? @Override
? ? public void run() {
? ? ? ? Scanner scanner = new Scanner(System.in);
? ? ? ? //線程循環(huán),發(fā)送用戶輸入的信息
? ? ? ? while (true) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? OutputStream outputStream =socket.getOutputStream();
? ? ? ? ? ? ? ? String string=scanner.nextLine();
? ? ? ? ? ? ? ? outputStream.write(string.getBytes());
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

接收類Receivelmpl :

package test;

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

public class Receivelmpl implements Runnable{
? ? //接收類
? ? private Socket socket;

? ? public Receivelmpl(Socket socket) {
? ? ? ? this.socket = socket;
? ? }

? ? @Override
? ? public void run() {
? ? ? ? //循環(huán)接收網(wǎng)絡(luò)發(fā)來(lái)的信息
? ? ? ? while (true) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? InputStream inputStream=socket.getInputStream();
? ? ? ? ? ? ? ? byte [] bytes=new byte[1024];
? ? ? ? ? ? ? ? int z=inputStream.read(bytes);
? ? ? ? ? ? ? ? System.out.println(new String(bytes,0,z));
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud基于Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的問(wèn)題小結(jié)

    SpringCloud基于Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的問(wèn)題小結(jié)

    這篇文章主要介紹了SpringCloud基于Feign遠(yuǎn)程調(diào)用,通過(guò)使用 Feign 的方式,我們可以更加優(yōu)雅地進(jìn)行多參數(shù)的遠(yuǎn)程調(diào)用,避免了手動(dòng)拼接URL或構(gòu)建復(fù)雜的請(qǐng)求體,需要的朋友可以參考下
    2024-02-02
  • JDBC程序更新數(shù)據(jù)庫(kù)中記錄的方法

    JDBC程序更新數(shù)據(jù)庫(kù)中記錄的方法

    這篇文章主要介紹了JDBC程序更新數(shù)據(jù)庫(kù)中記錄的方法,涉及Java基于JDBC操作數(shù)據(jù)庫(kù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Spring5使用JSR 330標(biāo)準(zhǔn)注解的方法

    Spring5使用JSR 330標(biāo)準(zhǔn)注解的方法

    從Spring3.0之后,除了Spring自帶的注解,我們也可以使用JSR330的標(biāo)準(zhǔn)注解,本文主要介紹了Spring5使用JSR 330標(biāo)準(zhǔn)注解,感興趣的可以了解一下
    2021-09-09
  • SpringMVC+Spring+Mybatis實(shí)現(xiàn)支付寶支付功能的示例代碼

    SpringMVC+Spring+Mybatis實(shí)現(xiàn)支付寶支付功能的示例代碼

    這篇文章主要介紹了SpringMVC+Spring+Mybatis實(shí)現(xiàn)支付寶支付功能的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Spring Security十分鐘入門教程

    Spring Security十分鐘入門教程

    這篇文章主要介紹了Spring Security入門教程,Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問(wèn)控制解決方案的安全框架
    2022-09-09
  • 詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證

    詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證

    本篇文章主要介紹了詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法

    Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法

    遇到了個(gè)問(wèn)題,同一天可以輸入多個(gè)時(shí)間段,但是每個(gè)時(shí)間段的時(shí)間不能出現(xiàn)重疊,這不就是判斷數(shù)據(jù)返回是否有重疊的變種嗎,所以本文給大家介紹了Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法,需要的朋友可以參考下
    2024-07-07
  • Maven中optional和scope元素的使用弄明白了嗎

    Maven中optional和scope元素的使用弄明白了嗎

    這篇文章主要介紹了Maven中optional和scope元素的使用弄明白了嗎,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • maven?scope?provided和runtime的例子說(shuō)明

    maven?scope?provided和runtime的例子說(shuō)明

    這篇文章主要介紹了maven?scope?provided和runtime的例子說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • iOS多線程介紹

    iOS多線程介紹

    這篇文章主要介紹了iOS多線程的相關(guān)知識(shí),涉及到對(duì)進(jìn)程,線程等方面的知識(shí)講解,本文非常具有參考價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05

最新評(píng)論