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

java?socket實(shí)現(xiàn)局域網(wǎng)聊天

 更新時(shí)間:2022年05月19日 15:59:57   作者:qq_24209665  
這篇文章主要為大家詳細(xì)介紹了java?socket實(shí)現(xiàn)局域網(wǎng)聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

使用socket實(shí)現(xiàn)局域網(wǎng)聊天,寫這個(gè)主要是為了深入理解socket與信息流在網(wǎng)絡(luò)中的傳送過(guò)程加深理解。

代碼很簡(jiǎn)單分為兩個(gè)類,一個(gè)服務(wù)器類,一個(gè)客戶端,運(yùn)行時(shí)分別啟動(dòng)兩個(gè)線程一個(gè)負(fù)責(zé)接受另一個(gè)負(fù)責(zé)發(fā)送。

整體流程是 兩臺(tái)機(jī)器分別啟動(dòng)程序,一個(gè)選擇主動(dòng)連接 另一個(gè)選擇被動(dòng)接受,即可實(shí)現(xiàn)類似qq的聊天效果兩個(gè)人可以同時(shí)發(fā)送消息。

注意的事,不要在同一臺(tái)電腦上同時(shí)啟動(dòng)兩個(gè),這樣會(huì)服務(wù)端和客戶端的ip都是相同很有可能造成自己發(fā)送的消息自己接受到了,可以兩臺(tái)電腦或者虛擬機(jī)里面進(jìn)行。

服務(wù)端:

package com.server;
?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
?
import com.client.RunClient;
?
public class RunServer {
?? ?public static Socket socket=null;
?? ?/**
?? ? * 建立服務(wù)器被動(dòng)連接
?? ? * @throws IOException
?? ? */
?? ?public void startServer() throws IOException {
?? ??? ?//服務(wù)器接收數(shù)據(jù)
?? ??? ?ServerSocket serverSocekt=new ServerSocket(8888);
?? ??? ?System.out.println("服務(wù)器啟動(dòng),等待連接...");
?? ??? ?//創(chuàng)建客戶端線程
?? ??? ?RunClient rc=new RunClient();
?? ??? ?Thread rct=new Thread(rc);
?? ??? ?rct.start();
?? ??? ?
?? ??? ?
?? ??? ?//阻塞線程 監(jiān)聽端口建立socket會(huì)話
?? ??? ?RunServer.socket=serverSocekt.accept();
?? ??? ?
?? ??? ?
?? ??? ?//獲取輸入留
?? ??? ?InputStream is=socket.getInputStream();
?? ??? ?//將字節(jié)輸入流轉(zhuǎn)換成字符輸入流
?? ??? ?InputStreamReader isr=new InputStreamReader(is);
?? ??? ?//將字符輸入流裝入帶緩沖的輸入流中
?? ??? ?BufferedReader br=new BufferedReader(isr);
?? ??? ?
?? ??? ?String str=null;
?? ??? ?while((str=br.readLine())!=null){
?? ??? ??? ?System.out.print("輸出信息:"+str);
?? ??? ?}
?? ??? ?socket.shutdownInput();
?? ??? ?serverSocekt.close();
?? ?}
}

客戶端:

package com.client;
?
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
?
import com.server.RunServer;
?
public class RunClient implements Runnable {
?? ?
?? ?@Override
?? ?public void run() {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?Scanner input = new Scanner(System.in);
?? ??? ?System.out.println("1、主動(dòng)連接\n2、被動(dòng)等待");
?? ??? ?String sign=input.next();
?? ??? ?switch (sign) {
?? ??? ?case "1":
?? ??? ??? ?try {
?? ??? ??? ??? ?System.out.println("輸入服務(wù)器IP:");
?? ??? ??? ??? ?startClient(input.next());
?? ??? ??? ?} catch (Exception e) {
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ?case "2":
?? ??? ??? ?try {
?? ??? ??? ??? ?startClient();
?? ??? ??? ?} catch (Exception e) {
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ??? ?
?? ??? ?default:
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?
?? ?
?? ?/**
?? ? * 由已經(jīng)建立的socket 進(jìn)行連接反向連
?? ? * @throws Exception?
?? ? * @throws UnknownHostException?
?? ? */
?? ?public void startClient() throws Exception{
?? ??? ?
?? ??? ?while(true){
?? ??? ??? ?try {
?? ??? ??? ??? ?if(RunServer.socket!=null){
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?Thread.sleep(1000);
?? ??? ??? ?} catch (InterruptedException e) {
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ??? ?
?? ??? ?// 與服務(wù)器建立連接
?? ??? ?Socket socket=new Socket(RunServer.socket.getInetAddress().getHostAddress(), 8888);
?? ??? ?System.out.println("連接建立成功...");
?? ??? ?
?? ??? ?//向服務(wù)器寫入流
?? ??? ?OutputStream os=socket.getOutputStream();
?? ??? ?BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
?? ??? ?Scanner input=new Scanner(System.in);
?? ??? ?
?? ??? ?while(true){
?? ??? ??? ?System.out.println("輸入信息:");
?? ??? ??? ?bw.write(input.next());
?? ??? ??? ?bw.newLine();
?? ??? ??? ?bw.flush();
?? ??? ?}
?? ?}
?? ?
?? ?/**
?? ? * 通過(guò)IP與服務(wù)器建立連接
?? ? * @throws Exception?
?? ? * @throws UnknownHostException?
?? ? */
?? ?public void startClient(String ip) throws Exception{
?? ??? ?// 與服務(wù)器建立連接
?? ??? ?Socket socket=new Socket(ip, 8888);
?? ??? ?System.out.println("連接建立成功...");
?? ??? ?
?? ??? ?//向服務(wù)器寫入流
?? ??? ?OutputStream os=socket.getOutputStream();
?? ??? ?BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
?? ??? ?Scanner input=new Scanner(System.in);
?? ??? ?
?? ??? ?while(true){
?? ??? ??? ?bw.write(input.next());
?? ??? ??? ?bw.newLine();
?? ??? ??? ?bw.flush();
?? ??? ?}
?? ?}
}

main:

package com.start;
?
import com.server.RunServer;
?
public class Go {
?
?? ?public static void main(String[] args) throws Exception {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?RunServer rs=new RunServer();
?? ??? ?rs.startServer();
?? ?}
?
}

效果:我是用虛擬機(jī)加本機(jī)

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

相關(guān)文章

  • 解決spring-cloud-config 多服務(wù)共享公共配置的問題

    解決spring-cloud-config 多服務(wù)共享公共配置的問題

    這篇文章主要介紹了解決spring-cloud-config 多服務(wù)共享公共配置的問題,本文通過(guò)多種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解Maven settings.xml配置(指定本地倉(cāng)庫(kù)、阿里云鏡像設(shè)置)

    詳解Maven settings.xml配置(指定本地倉(cāng)庫(kù)、阿里云鏡像設(shè)置)

    這篇文章主要介紹了詳解Maven settings.xml配置(指定本地倉(cāng)庫(kù)、阿里云鏡像設(shè)置),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Java 中的垃圾回收機(jī)制詳解

    Java 中的垃圾回收機(jī)制詳解

    這篇文章主要為大家詳細(xì)介紹了Java垃圾回收機(jī)制的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java?多個(gè)文件生成zip包、下載zip包的實(shí)現(xiàn)代碼

    Java?多個(gè)文件生成zip包、下載zip包的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java?多個(gè)文件生成zip包、下載zip包,包括文件上傳,文件下載,多個(gè)文件打成zip包的操作代碼,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • SpringBoot讀取Resource下文件的4種方法

    SpringBoot讀取Resource下文件的4種方法

    這篇文章主要介紹了SpringBoot讀取Resource下文件的4種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 基于java開發(fā)之系統(tǒng)托盤的應(yīng)用

    基于java開發(fā)之系統(tǒng)托盤的應(yīng)用

    本篇文章介紹了,基于java開發(fā)之系統(tǒng)托盤的應(yīng)用。需要的朋友參考下
    2013-05-05
  • Java中的CompletableFuture詳解

    Java中的CompletableFuture詳解

    這篇文章主要介紹了Java中的CompletableFuture詳解,Future接口(FutueTask實(shí)現(xiàn)類)定義了操作異步任務(wù)執(zhí)行一些方法,如獲取異步任務(wù)的執(zhí)行結(jié)果、取消任務(wù)的執(zhí)行、判斷任務(wù)是否被取消、判斷任務(wù)執(zhí)行是否完畢等,需要的朋友可以參考下
    2023-09-09
  • 淺談Java安全之C3P0鏈利用與分析

    淺談Java安全之C3P0鏈利用與分析

    本文主要介紹了淺談Java安全之C3P0鏈利用與分析,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • java Thread 多線程

    java Thread 多線程

    本篇文章小編為大家介紹,java Thread 多線程。需要的朋友參考下
    2013-04-04
  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性

    Spring 框架 4 支持 Java 8 語(yǔ)言和 API 功能。在本文中,我們將重點(diǎn)放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表達(dá)式,方法引用,JSR-310的日期和時(shí)間,和可重復(fù)注釋。下面跟著小編一起來(lái)看下吧
    2017-03-03

最新評(píng)論