今天在看java网络高级编程,里面的一些例子相当的不错,在这分享一个applet聊天室,不足之处请指正。
1. 服务端代码:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectInputStream.GetField; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; public class ChatServer { /**m_threads是一个Vector变量,维护所有Server放的ServerThread对象 * 通过该变量能想所有加入聊天室的用户广播信息,撤销退出的聊天者 * * @param args */ public static void main(String[] args) { ServerSocket serverSocket = null; Vector m_threads = new Vector(); System.out.println("listening^"); try { //设置ServerSocket监听端口号为5555(可以自己设定),该端口号必须与客户端的端口号一致 serverSocket = new ServerSocket(5555); } catch (IOException e) { e.printStackTrace(); return; } int nid = 0; while(true){ try { //监听新的联结者 Socket s = serverSocket.accept(); System.out.println("accepted"); //创建信息聊天线程 ServerThread st = new ServerThread(s, m_threads); //设置用户id st.setID(nid++); m_threads.addElement(st); new Thread(st).start(); for(int i=0;i<m_threads.size();i++){ ServerThread ss = (ServerThread) m_threads.elementAt(i); ss.write("<#>welcome"+ss.getID()+"to enter chatroom"); } System.out.println("listen again"); } catch (IOException e) { e.printStackTrace(); } } } /** * 监听线程,监听是否有新的信息传来 * @author Administrator * */ static class ServerThread implements Runnable{ Vector m_threads; Socket m_socket = null; DataInputStream m_in = null; DataOutputStream m_out = null; int m_id =0;//线程id //构造方法创建线程 public ServerThread(Socket s,Vector threads) { this.m_socket = s; this.m_threads = threads; try { //构造输入输出流对象 m_in = new DataInputStream(m_socket.getInputStream()); m_out = new DataOutputStream(m_socket.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { System.out.println("thread running"); try { while(true){ //线程封锁在m_in.readUTF(),直到有信息传来 String s = m_in.readUTF(); if(s==null) break; //如果传来的是leave则通知其他人该用户退出聊天室 if(s.trim().equals("leave")){ for (int i = 0; i < m_threads.size(); i++) { ServerThread serverThread = (ServerThread) m_threads.elementAt(i); serverThread.write("***<"+getID()+">***leave"); } }else{//向所有联结者广播信息 for (int i = 0; i < m_threads.size(); i++) { ServerThread serverThread = (ServerThread) m_threads.elementAt(i); serverThread.write("***<"+getID()+">"+s); } } } } catch (IOException e) { e.printStackTrace(); } try { m_threads.remove(this);//移除退出聊天室的用户线程 m_socket.close();//关闭socket } catch (IOException e) { e.printStackTrace(); } } /** * 打印消息 * @param msg */ public void write(String msg){ try { synchronized (m_out) { m_out.writeUTF(msg); } } catch (IOException e) { e.printStackTrace(); } } public int getID(){ return m_id; } public void setID(int nid){ this.m_id = nid; } } }
2.客户端代码:
import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Event; import java.awt.TextArea; import java.awt.TextField; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.URL; import java.net.UnknownHostException; public class ChatApplet1 extends Applet implements Runnable{ /** * */ private static final long serialVersionUID = -1670682436342902989L; TextArea m_textarea;//接收消息显示窗口 TextField m_textfield;//消息发送窗口 DataInputStream m_in;//输入流 DataOutputStream m_out;//输出流 /** * 初始化聊天室窗口 */ public void init(){ setLayout(null); setSize(426, 226); m_textarea = new TextArea(10,10); m_textfield = new TextField(); m_in = null; m_out = null; try { //获取服务器地址 URL url = getCodeBase(); //获取服务器ip地址 InetAddress address = InetAddress.getByName(url.getHost()); Socket m_socket; //打印服务器ip地址 通信协议 System.out.println("server address:"+address+" "+url.getHost()+" "+url.getProtocol()); //创建与服务器的链接,端口与服务端口一致 m_socket = new Socket(address,5555); //创建输入输出流 m_in = new DataInputStream(m_socket.getInputStream()); m_out = new DataOutputStream(m_socket.getOutputStream()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } setLayout(new BorderLayout()); add("Center",m_textarea); add("South",m_textfield); m_textarea.setEditable(false); new Thread(this).start();//启动线程监听 } /** * 按下enter键时发送消息 */ @Override public boolean handleEvent(Event evt) { String b = m_textfield.getText(); if((evt.target==m_textfield)&&evt.id==Event.ACTION_EVENT){ m_textfield.setText(""); try { m_out.writeUTF(b);//向服务端发送消息,编码格式UTF-8 return true; } catch (IOException e) { e.printStackTrace(); } } return super.handleEvent(evt); } /** * 监听对应的服务线程,并将聊天信息展示在窗口中 */ @Override public void run() { while(true){ try { String s = m_in.readUTF();//读取聊天信息 if(s!=null){ m_textarea.append(s+"\n"); } } catch (IOException e) { e.printStackTrace(); m_textarea.setText(e.getMessage()); m_textfield.setVisible(false); } } } @Override public void stop() { super.stop(); try { m_out.writeUTF("leave"); } catch (IOException e) { e.printStackTrace(); } } }
核心注释已写上,本人文笔不好,总结的话就不扯啦。
相关推荐
Java简单聊天室源代码是一种基于Java编程语言实现的多用户实时通信系统,它允许多个用户在同一平台上进行实时的文本交流。这个项目对于初学者来说是一个很好的实践机会,可以帮助他们理解和应用Java网络编程、多线程...
【Java简单聊天室】是一个基于Java编程语言实现的交互式应用程序,主要目的是提供一个基本的聊天环境,允许用户之间进行实时通信。这个项目的核心在于利用Java的网络编程能力,通过Socket编程来实现实时的数据传输。...
这个“JAVA简单聊天室”项目基于Socket套接字技术,它允许两个或多个网络应用程序之间进行双向通信。现在,我们将深入探讨这个项目涉及到的核心知识点。 1. **Java Socket编程**: Java Socket是TCP/IP协议族的一...
【Java简单聊天室】是一个基于Java编程语言实现的交互式应用程序,主要功能包括用户登录、账户验证以及多线程通信的聊天功能。这个项目旨在帮助初学者理解Java的基础概念,如面向对象编程、网络编程以及多线程技术。...
【Java简单聊天室】是一个基于Java编程语言实现的简易通讯应用,主要由客户端类和服务器端类构成,旨在提供一个基础的文本聊天环境。在这个项目中,开发者通过编写这两个核心类,实现了用户之间的实时信息交流。 1....
【Java简单聊天室程序】是一种基于Java编程语言实现的简易通信应用,主要目的是为了提供一个基础的交流平台,便于初学者理解和实践网络编程中的多线程、Socket通信以及用户交互等核心概念。在这个完整的代码中,我们...
Java简单聊天室是一个基本的网络通信应用,它允许用户通过网络进行实时文本交流,并且具有文件传输的功能。这个例子展示了如何使用Java实现这样的系统,这对于理解网络编程和多线程的概念非常有帮助。 首先,我们要...
JAVA简单聊天室
【JAVA简单聊天室程序】 Java聊天室程序是一个基础但经典的项目,它可以帮助初学者理解网络编程、多线程以及客户端-服务器通信等核心概念。在这个程序中,通常会包含一个服务器端(Server)和多个客户端(Client)...
【Java简单聊天室设计】是一个课程设计项目,旨在让学生通过实践深入理解Java语言的核心特性和面向对象编程。在这个设计中,学生将运用Java的多线程、图形用户界面(GUI)、网络通信以及文件处理等技术来创建一个...
在本项目中,我们主要探讨的是如何设计一个基于Java的简单聊天室,它采用经典的C/S(客户端/服务器)架构,允许多人同时登录并进行实时通信。以下是该项目涉及的关键技术点和实现步骤: 1. **C/S架构**: C/S架构...
【Java简易聊天室】是一个基于Java编程语言实现的简单网络通信应用,主要利用了TCP(Transmission Control Protocol)传输协议和多线程技术。这个项目专为NetBeans 8.2及更高版本设计,旨在提供一个基础的聊天环境,...
在本文中,我们将深入探讨如何使用Java来实现一个简单的聊天室。这个聊天程序分为客户端(Client)和服务器端(Server),并且利用了Java的核心网络编程技术——Socket和Stream。Socket是网络通信的基础,它提供了两...
总的来说,基于UDP的Java简单聊天室项目涵盖了网络编程基础、图形界面设计和并发处理等多个技术点。它可以帮助开发者巩固Java编程技能,理解UDP的工作原理,以及如何在实际应用中实现网络通信。在实际开发过程中,还...
### 知识点详解 #### 一、Java网络编程基础 ...通过以上分析,我们可以看到这个简单的Java聊天室程序涵盖了Java网络编程、图形用户界面设计等多个方面的知识点,对于初学者来说是一个非常好的学习案例。
本实例是基于Java Socket实现的一个简单聊天室,它包含客户端(Client)和服务器端(Server)两部分,允许用户通过网络进行实时对话。下面将详细介绍这个聊天室实例的核心知识点。 首先,我们要了解Java Socket。...