奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

如何運用Java socket實現(xiàn)多人聊天室功能

時間:2025-01-14 14:49:15 java語言 我要投稿
  • 相關推薦

如何運用Java socket實現(xiàn)多人聊天室功能

  導語:如何運用Java socket實現(xiàn)多人聊天室功能呢?下面是小編給大家提供的代碼實現(xiàn),大家可以參考閱讀,更多詳情請關注應屆畢業(yè)生考試網。

  目錄結構:

  ChatClient:

  package com.panda.chat;

 

  import java.awt.*;

  import java.awt.event.*;

  import java.io.*;

  import java.net.*;

  @SuppressWarnings("serial")

  public class ChatClient extends Frame {

  private TextArea ta = new TextArea();

  private TextField tf = new TextField();

  private DataOutputStream dos = null;

  private DataInputStream dis = null;

  private Socket socket = null;

  private boolean bConnected = false;

  private Thread thread=null;

  public static void main(String[] args) {

  new ChatClient().frameClient();

  }

  public void frameClient(){

  setSize(400, 400);

  setLocation(400,300);

  add(ta,BorderLayout.NORTH);

  add(tf,BorderLayout.SOUTH);

  pack();

  tf.addActionListener(new TfListener());

  //關閉窗口事件監(jiān)聽

  this.addWindowListener(new WindowAdapter() {

  @Override

  public void windowClosing(WindowEvent e) {

  disconnected();

  System.exit(0);

  }

  });

  this.connect();

  setVisible(true);

  }

  //鏈接服務器地址

  private void connect(){

  try {

  socket = new Socket("127.0.0.1", 8888);

  thread=new Thread(new ChatThread());

  thread.start();

  dos = new DataOutputStream(socket.getOutputStream());

  dis = new DataInputStream(socket.getInputStream());

  } catch (UnknownHostException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  //斷開連接

  private void disconnected(){

  bConnected = false;

  try {

  dos.close();

  dis.close();

  socket.close();

  } catch (IOException e1) {

  // TODO Auto-generated catch block

  e1.printStackTrace();

  }

  }

  //鍵盤回車事件

  private class TfListener implements ActionListener{

  @Override

  public void actionPerformed(ActionEvent e) {

  String strMsg = tf.getText();

  tf.setText("");

  try {

  dos.writeUTF(strMsg);

  dos.flush();

  } catch (IOException e1) {

  // TODO Auto-generated catch block

  e1.printStackTrace();

  }

  }

  }

  //開啟線程接受服務器信息

  private class ChatThread implements Runnable{

  @Override

  public void run() {

  try {

  bConnected = true;

  while(bConnected){

  String msg = dis.readUTF();

  String taText = ta.getText();

  ta.setText(taText+msg+"\n");

  }

  } catch (SocketException e) {

  System.out.println("退出");;

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  }

  }

  ChatServer:

  package com.panda.chat;

  import java.io.*;

  import java.net.*;

  import java.util.*;

  public class ChatServer {

  private boolean started = false;

  private List<ChatThread> chatThreads = new ArrayList<ChatThread>();

  public static void main(String[] args) {

  new ChatServer().startServer();

  }

  private void startServer(){

  try {

  //開啟服務端Socket

  ServerSocket seso = new ServerSocket(8888);

  started = true;

  while(started){

  //接受客戶端連接請求

  Socket sos = seso.accept();

  System.out.println("一個客戶端已連接");

  //開啟線程處理客戶端通信

  ChatThread ct = new ChatThread(sos);

  chatThreads.add(ct);

  new Thread(ct).start();

  }

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  private class ChatThread implements Runnable{

  private Socket socket;

  private DataInputStream din=null;

  private DataOutputStream don=null;

  private boolean bConnected = false;

  public ChatThread(Socket socket) {

  super();

  this.socket = socket;

  }

  //發(fā)送信息的函數(shù)

  private void send(String strMsgIn){

  try{

  don.writeUTF(strMsgIn);

  don.flush();

  }catch(IOException e){

  e.printStackTrace();

  }

  }

  @Override

  public void run() {

  try{

  din = new DataInputStream(socket.getInputStream());

  don = new DataOutputStream(socket.getOutputStream());

  //讀取數(shù)據

  bConnected = true;

  while(bConnected){

  String strMsgIn = din.readUTF();

  System.out.println(strMsgIn);

  //接收到數(shù)據后發(fā)送給每個客戶端

  for(int i =0;i<chatThreads.size();i++){

  chatThreads.get(i).send(strMsgIn);

  }

  }

  }catch (IOException e) {

  try {

  //如果客戶端出錯或關閉,直接關閉連接,并移除List中的當前線程

  socket.close();

  chatThreads.remove(this);

  } catch (IOException e1) {

  // TODO Auto-generated catch block

  e1.printStackTrace();

  }

  } finally{

  try {

  din.close();

  don.close();

  socket.close();

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  }

  }

  }

  運行ChatSever后,再同時打開多次ChatClient,就可以實現(xiàn)多人聊天了,你也試試。

【如何運用Java socket實現(xiàn)多人聊天室功能】相關文章:

Java如何通過Socket實現(xiàn)TCP服務端10-08

java如何實現(xiàn)后臺自動發(fā)郵件功能09-17

講解Java的Socket網絡編程的多播與廣播實現(xiàn)09-03

java實現(xiàn)后臺自動發(fā)郵件功能08-06

java如何實現(xiàn)漢諾塔08-08

如何運用PS實現(xiàn)人物姿態(tài)的改變08-20

java通用組合算法如何實現(xiàn)09-12

Java中如何實現(xiàn)顯示動態(tài)的時間09-28

Java網絡基礎和Socket通信基礎10-25

主站蜘蛛池模板: 河东区| 三明市| 鄂托克旗| 梁平县| 全州县| 沾化县| 双江| 高邮市| 大邑县| 玛沁县| 五家渠市| 辉南县| 枣庄市| 红安县| 冕宁县| 金昌市| 甘泉县| 陆良县| 筠连县| 武定县| 保山市| 贵定县| 宾川县| 通城县| 颍上县| 集安市| 中西区| 贺兰县| 定西市| 铜川市| 东方市| 汝阳县| 肥西县| 通化县| 积石山| 天门市| 南皮县| 古浪县| 青川县| 扬州市| 普定县|