最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java編程實現基于TCP協議的Socket聊天室示例

 更新時間:2018年01月29日 11:58:42   作者:fearlessMore  
這篇文章主要介紹了Java編程實現基于TCP協議的Socket聊天室,結合實例形式詳細分析了java基于TCP協議的Socket聊天室客戶端與服務器端相關實現與使用技巧,需要的朋友可以參考下

本文實例講述了Java編程實現基于TCP協議的Socket聊天室。分享給大家供大家參考,具體如下:

這里使用Socket套接字進行編程,完成的是基于TCP可靠服務實現服務器與客戶端的雙通信。

Server服務器端:

package com.han;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
 * 本程序實現了一個TCP程序的服務器編程部分。
 * 使用Socket套接字進行編程,完成的是基于TCP可靠服務實現與客戶端的雙通信。
 * 客戶端的編程見本包中的類Client
 * @author HAN
 *
 */
@SuppressWarnings("serial")
public class Server extends JDialog{
  private BufferedReader reader;
  private PrintWriter writer;
  private ServerSocket server;
  private Socket socket;
  private JTextArea ta=new JTextArea();
  private JScrollPane sp=new JScrollPane(ta);
  private JTextField tf=new JTextField();
  Container cc;
  public Server(String title) {
    setTitle(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent we) {
        dispose(); //撤銷dialog一切相關資源
        System.exit(0); //正常退出程序
      }
    });
    cc=getContentPane();
    setLayout(null);
    ta.setLineWrap(true);
    ta.setEditable(false);
    sp.setBounds(0,0,300,342);
    tf.setBounds(0,342,300,25);
    cc.add(sp);
    cc.add(tf);
    tf.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        try {
          writer=new PrintWriter(socket.getOutputStream(),true);
        } catch (IOException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
        writer.println(tf.getText());
        ta.append("User1:"+tf.getText()+'\n');
        tf.setText("");
      }
    });
  }
  void getserver(){
    try{
      server=new ServerSocket(8998);
      ta.append("服務器套接字已經創(chuàng)建成功\n");
      while(true){
        ta.append("等待客戶機的連接\n");
        socket=server.accept();
        ta.append("客戶機已連接\n");
        reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        getClientMessage();
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  private void getClientMessage(){
    try {
      while(true){
        String news=reader.readLine();
        if(news!=null){
          ta.append("User2:"+news+"\n");
        }else{
          ta.append("User2(客戶端) 已斷開鏈接\n");
          break;
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    try{
      if(reader!=null){
        reader.close();
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    if(socket!=null){
      try {
        socket.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {
    Server user1=new Server("User1");
    user1.setBounds(0,0,300,400);
    user1.setResizable(false);
    user1.setVisible(true);
    user1.getserver();
  }
}

Client客戶端:

package com.han;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
/**
 * 本程序實現了一個TCP程序的客戶端編程部分。
 * 使用Socket套接字進行編程,完成的是基于TCP可靠服務實現與服務器的雙通信。
 * 服務器的編程見本包中的類Server
 * 可以在不同的平臺與不同的機器上運行,只是要把代碼中寫的IP地址修改為運行服務器程序Server的機器的IP地址。
 * @author HAN
 *
 */
@SuppressWarnings("serial")
public class Client extends JDialog{
  private BufferedReader reader;
  private PrintWriter writer;
  private Socket socket;
  private JTextArea ta=new JTextArea();
  private JScrollPane sp=new JScrollPane(ta);
  private JTextField tf=new JTextField();
  Container cc;
  public Client(String title) {
    setTitle(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent we) {
        dispose(); //撤銷dialog一切相關資源
        System.exit(0); //正常退出程序
      }
    });
    cc=getContentPane();
    setLayout(null);
    ta.setLineWrap(true);
    ta.setEditable(false);
    sp.setBounds(0,0,300,342);
    tf.setBounds(0,342,300,25);
    cc.add(sp);
    cc.add(tf);
    tf.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        writer.println(tf.getText());
        ta.append("User2:"+tf.getText()+'\n');
        tf.setText("");
      }
    });
  }
  private void connect(){
    ta.append("嘗試連接\n");
    try {
      socket=new Socket("192.168.1.3",8998);
    } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    try {
      writer=new PrintWriter(socket.getOutputStream(),true);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    ta.append("完成連接\n");
  }
  private void getClientMessage(){
    try {
      reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
      while(true){
        String news=reader.readLine();
        if(news!=null){
          ta.append("User1:"+news+"\n");
        }else{
          ta.append("User1(服務器) 已斷開鏈接,等待服務器重連之時,重啟User2(客戶端)進行通信\n");
          break;
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      ta.append("User1(服務器) 已斷開鏈接,等待服務器重連之時,重啟User2(客戶端)進行通信\n");
      e.printStackTrace();
    }
    try{
      if(reader!=null){
        reader.close();
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    if(socket!=null){
      try {
        socket.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {
    Client user2=new Client("User2");
    user2.setBounds(0,0,300,400);
    user2.setVisible(true);
    user2.setResizable(false);
    user2.connect();
    user2.getClientMessage();
  }
}

更多關于java相關內容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結》、《Java文件與目錄操作技巧匯總》、《Java數據結構與算法教程》、《Java操作DOM節(jié)點技巧總結》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

  • 一文帶你了解Java中的函數式編程

    一文帶你了解Java中的函數式編程

    函數式編程的理論基礎是阿隆佐·丘奇(Alonzo Church)于 1930 年代提出的 λ 演算(Lambda Calculus)。這篇文章主要為大家介紹了函數式編程的相關知識,希望對大家有所幫助
    2023-04-04
  • 簡單的用java實現讀/寫文本文件的示例

    簡單的用java實現讀/寫文本文件的示例

    同時也展示了如果從輸入流中讀出來內容寫入輸出流中(僅限文本流) 三個例子可以獨立存在,所以根據需要只看其中一個就行了。
    2008-07-07
  • Spring?Cloud?+?Nacos?+?Seata整合過程(分布式事務解決方案)

    Spring?Cloud?+?Nacos?+?Seata整合過程(分布式事務解決方案)

    Seata 是一款開源的分布式事務解決方案,致力于在微服務架構下提供高性能和簡單易用的分布式事務服務,這篇文章主要介紹了Spring?Cloud?+?Nacos?+?Seata整合過程(分布式事務解決方案),需要的朋友可以參考下
    2022-03-03
  • Java實現軟件運行時啟動信息窗口的方法

    Java實現軟件運行時啟動信息窗口的方法

    這篇文章主要介紹了Java實現軟件運行時啟動信息窗口的方法,比較實用的功能,需要的朋友可以參考下
    2014-08-08
  • APP轉盤抽獎Java服務端接口詳解

    APP轉盤抽獎Java服務端接口詳解

    這篇文章主要為大家詳細介紹了APP轉盤抽獎Java服務端接口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java SpringBoot 集成 Redis詳解

    Java SpringBoot 集成 Redis詳解

    Redis 是一個由 Salvatore Sanfilippo 寫的 key-value 存儲系統(tǒng),是跨平臺的非關系型數據庫。Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基于內存、分布式、可選持久性的鍵值對(Key-Value)存儲數據庫,并提供多種語言的 API
    2021-10-10
  • springboot+thymeleaf+layui的實現示例

    springboot+thymeleaf+layui的實現示例

    本文主要介紹了springboot+thymeleaf+layui的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • 解決java項目jar打包后讀取文件失敗的問題

    解決java項目jar打包后讀取文件失敗的問題

    這篇文章主要介紹了解決java項目jar打包后讀取文件失敗的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring Aop組成部分及實現步驟

    Spring Aop組成部分及實現步驟

    面向切面編程,是對面向對象編程的一種補充,是一種編程思想,是對某一類的事情的集中處理,這篇文章主要介紹了Spring Aop組成部分及實現步驟,需要的朋友可以參考下
    2023-08-08
  • springboot項目如何使用切面記錄用戶操作日志

    springboot項目如何使用切面記錄用戶操作日志

    這篇文章主要介紹了springboot項目如何使用切面記錄用戶操作日志,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

湘潭县| 高密市| 邹平县| 武冈市| 普兰县| 鄂尔多斯市| 朝阳市| 阿荣旗| 遂昌县| 尤溪县| 孟津县| 吉首市| 九江县| 襄樊市| 玛多县| 湖北省| 乌鲁木齐县| 措美县| 汪清县| 酒泉市| 紫阳县| 安阳县| 福州市| 凤庆县| 永嘉县| 长泰县| 贵溪市| 枣阳市| 通州市| 鄂托克旗| 山东省| 宜章县| 峨眉山市| 东源县| 从化市| 黎川县| 长岛县| 祁阳县| 万盛区| 清流县| 磴口县|