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

Java使用TCP實(shí)現(xiàn)在線聊天的示例代碼

 更新時(shí)間:2020年01月03日 15:15:36   作者:小矮多  
這篇文章主要介紹了Java使用TCP實(shí)現(xiàn)在線聊天的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

客戶端的代碼:

package tcp.http;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client{
public static void main(String[] args) throws IOException{
Scanner scanner=new Scanner(System.in);
//1.創(chuàng)建Socket
Socket tcpClientSocket=new Socket();
//2.TCP要發(fā)送消息,必須先建立連接
byte[] IPv4={127,0,0,1};  //連接到本機(jī)
InetAddress serverAddress=InetAddress.getByAddress(IPv4);
SocketAddress serverSocketAddress=new InetSocketAddress(serverAddress,7777);
tcpClientSocket.connect(serverSocketAddress);//連接上了,(連接過(guò)程代碼比較長(zhǎng),但是沒(méi)有什么復(fù)雜的,只需要查文檔根據(jù)函數(shù)的構(gòu)造過(guò)程,一步步來(lái)寫就好了)

while(true){ //寫個(gè)死循環(huán)來(lái)聊天
String request=scanner.nextLine();
//通過(guò)字節(jié)流寫入請(qǐng)求
OutputStream os=tcpClientSocket.getOutputStream();
//通過(guò)打印流打印和寫入
PrintStream out=new PrintStream(os,true,"UTF-8");
out.println(request);
//通過(guò)字節(jié)流讀取響應(yīng)
InputStream is=tcpClientSocket.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(is,"UTF-8")); //通過(guò)readLine()來(lái)保證每次都能把一句完整的話讀完(\r\n是標(biāo)志);
String response=reader.readLine();
System.out.println("      "+response);
}
//tcpClientSocket.close();
}
}

服務(wù)器端的代碼:

package tcp.threads;

import java.io.*;
import java.net.*;
import java.util.Scanner;
import java.util.concurrent.*;

public class Server{

private static class TalkRunnable implements Runnable{ //一個(gè)個(gè)的工作線程
private Socket clientSocket;
TalkRunnable(Socket socket){
this.clientSocket=socket;
}
@Override
public void run(){
try{
InetAddress clientAddress=clientSocket.getInetAddress();
int clientPort=clientSocket.getPort();
System.out.printf("ID為 %s:%d 的好友上線了%n",clientAddress.getHostAddress(),clientPort);
//獲取字節(jié)流
InputStream is=null;
is=clientSocket.getInputStream();
//字節(jié)流轉(zhuǎn)換為字符流
InputStreamReader 
isReader=null;
isReader=new InputStreamReader(is,"UTF-8");
//獲取輸出字節(jié)流
OutputStream os=clientSocket.getOutputStream();
//獲取打印流
PrintStream out=new PrintStream(os,true,"UTF-8");
//獲取緩沖字符流
BufferedReader reader=new BufferedReader(isReader);
while(true){ //死循環(huán)聊天
String line=reader.readLine();
System.out.println("      好友說(shuō):"+line);
Scanner scanner=new Scanner(System.in);
String response=scanner.nextLine();
out.println(response);
}
}catch(IOException e){
e.printStackTrace();
}
}
}

public static void main(String[] args) throws IOException{
//監(jiān)聽(tīng)連接
ServerSocket tcpServerSocket=new ServerSocket(7777);
//定義阻塞隊(duì)列
BlockingQueue<Runnable> queue=new LinkedBlockingQueue<>();
//創(chuàng)建線程池
ExecutorService pool=new ThreadPoolExecutor(100,100,0,TimeUnit.MILLISECONDS,queue);

while(true){
//TCP 要發(fā)送消息必須先建立連接
Socket clientSocket=tcpServerSocket.accept();
pool.execute(new TalkRunnable(clientSocket));//有一個(gè)客戶端連接到服務(wù)器,就起一個(gè)線程來(lái)專門處理這個(gè)對(duì)話
}
}
}

運(yùn)行結(jié)果:

為什么要使用多線程?

因?yàn)閱尉€程會(huì)發(fā)生阻塞,聊天就進(jìn)行不下去了。。。

又是自己和自己聊天的一天= =,最近好迷TCP和UDP,歡迎各位大佬批評(píng)指正呀,一起交流呀!!! 啦啦啦

對(duì)比這個(gè)聊天程序和上一篇用UDP寫的聊天程序可以更好的體會(huì)TCP和UDP的區(qū)別。

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

相關(guān)文章

  • Java編程中應(yīng)用的GUI設(shè)計(jì)基礎(chǔ)

    Java編程中應(yīng)用的GUI設(shè)計(jì)基礎(chǔ)

    這篇文章主要介紹了Java編程中應(yīng)用的GUI設(shè)計(jì)基礎(chǔ),為一些Java開(kāi)發(fā)CS類型應(yīng)用的基礎(chǔ)概念知識(shí),需要的朋友可以參考下
    2015-10-10
  • Spring?Boot集成etcd的詳細(xì)過(guò)程

    Spring?Boot集成etcd的詳細(xì)過(guò)程

    etcd是一個(gè)分布式鍵值存儲(chǔ)數(shù)據(jù)庫(kù),用于共享配置和服務(wù)發(fā)現(xiàn),etcd采用Go語(yǔ)言編寫,具有出色的跨平臺(tái)支持,很小的二進(jìn)制文件和強(qiáng)大的社區(qū),這篇文章主要介紹了SpringBoot集成etcd,需要的朋友可以參考下
    2023-08-08
  • Spring Aop 如何獲取參數(shù)名參數(shù)值

    Spring Aop 如何獲取參數(shù)名參數(shù)值

    這篇文章主要介紹了Spring Aop 如何獲取參數(shù)名參數(shù)值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • IDEA 工程里 new不出來(lái)Vue文件的圖文解決方案

    IDEA 工程里 new不出來(lái)Vue文件的圖文解決方案

    這篇文章主要介紹了IDEA 工程里 new不出來(lái)Vue文件的解決方案,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • spring AOP的After增強(qiáng)實(shí)現(xiàn)方法實(shí)例分析

    spring AOP的After增強(qiáng)實(shí)現(xiàn)方法實(shí)例分析

    這篇文章主要介紹了spring AOP的After增強(qiáng)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了spring面向切面AOP的After增強(qiáng)實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • Java中的RestTemplate使用詳解

    Java中的RestTemplate使用詳解

    這篇文章主要介紹了Java中的RestTemplate使用詳解,Spring內(nèi)置了RestTemplate作為Http請(qǐng)求的工具類,簡(jiǎn)化了很多操作,雖然Spring5推出了WebClient,但是整體感覺(jué)還是RestTemplate用起來(lái)更簡(jiǎn)單方便一些,需要的朋友可以參考下
    2023-10-10
  • 5分鐘搞定java單例模式

    5分鐘搞定java單例模式

    單例模式(Singleton?Pattern)是?Java?中最簡(jiǎn)單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,本文給大家介紹下java單例模式的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-03-03
  • SpringSecurity退出功能實(shí)現(xiàn)的正確方式(推薦)

    SpringSecurity退出功能實(shí)現(xiàn)的正確方式(推薦)

    本文將介紹在Spring Security框架下如何實(shí)現(xiàn)用戶的"退出"logout的功能。本文通過(guò)實(shí)例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-11-11
  • Java單鏈表基本操作的實(shí)現(xiàn)

    Java單鏈表基本操作的實(shí)現(xiàn)

    鏈表是一種數(shù)據(jù)結(jié)構(gòu),和數(shù)組同級(jí)。接下來(lái)通過(guò)本文給大家介紹Java單鏈表基本操作的實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧
    2016-07-07
  • Java進(jìn)程間通信之消息隊(duì)列

    Java進(jìn)程間通信之消息隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了Java進(jìn)程間通信之消息隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論