`
longying2008
  • 浏览: 302068 次
社区版块
存档分类
最新评论

菜鸟编程之java查缺补漏——Simple_Chat(java聊天室)

阅读更多

Chat_Server.java

 

import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;

public class Chat_Server {
	ServerSocket server=null;
	//ObjectInputStream input=null;
	
	boolean isStart=false;//服务端是否启动
	boolean isConnect=false;//客户端是否连接上
	ArrayList<Client_Thread> clients=
			new ArrayList<Client_Thread>();
	public static void main(String[] args) {
		new Chat_Server().startServer();
	}

	private void startServer(){
		System.out.println("服务端已启动");
		try{
			server=new ServerSocket(8888);
			isStart=true;
		}catch(BindException e){
			System.out.println("端口使用中....");
			System.exit(0);
		}catch(IOException e){
			e.printStackTrace();
			System.exit(0);
		}
		try {
			while(isStart){
				Socket client=server.accept();
				//客户端连接成功后,为客户端创建一个独立的线程接受消息
				Client_Thread client_thread=
						new Client_Thread(client);
				new Thread(client_thread).start();//启动线程
				clients.add(client_thread);//添加
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		finally{
			try {
				server.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/*
	 * 每当一个客户端连接到服务器都会创建一个如此的线程
	 */
	class Client_Thread implements Runnable{
		
		//类里边保留socket、inputStream
		private Socket s=null;
		private ObjectInputStream in=null;
		private ObjectOutputStream output=null;
		private boolean isConnect=false;
		Client_Thread(Socket s){
			this.s=s;
			try {
				in=new ObjectInputStream(s.getInputStream());
				output=new ObjectOutputStream(s.getOutputStream());
				isConnect=true;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				System.out.println("Client_Thread");
				e.printStackTrace();
			}
		}
		
		public void send(String str){
			try {
				output.writeObject(str);
				output.flush();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		public void run() {
			System.out.println("服务端监听已启动");
				String str;
				try {
					while(isConnect){
						str = (String)in.readObject();
						System.out.println(str);
						
						for(int i=0;i<clients.size();i++){
							Client_Thread c=clients.get(i);
							c.send(str);
						}
					}	
				} catch (SocketException e) {
					System.out.println("客户端已关闭");
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				finally{
					try {
						if(in!=null) in.close();
						if(output!=null) output.close();
						s.close();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
				}
		}
		
	}
}

 

 

 

Chat_Client.java

 

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Chat_Client extends Frame{
	
	TextField textField=new TextField();
	TextArea textArea=new TextArea();
	String str=null;
	
	Socket client;
	ObjectOutputStream output=null;
	ObjectInputStream input=null;
	boolean isConnected=false;
	
	public static void main(String[] args) {
		new Chat_Client().launchFrame();
	}
	

	public Chat_Client(){
		connect();
		new Thread(new ClientOwnThread()).start();
	}
	
	public void launchFrame(){
		this.setLocation(400,300);
		this.setSize(300,300);
		this.add(textArea,BorderLayout.NORTH);
		this.add(textField,BorderLayout.SOUTH);
		this.pack();
		textArea.setEditable(false);
		this.setVisible(true);
		
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		
		textField.addActionListener(new TextFieldListener());
	}
	
	private void connect(){
		try {
			client=new Socket("127.0.0.1",8888);
			output=new ObjectOutputStream(client.getOutputStream());
			input=new ObjectInputStream(client.getInputStream());
			isConnected=true;
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void disConnect(){
		
		try {
			if(output!=null) output.close();
			if(input!=null) input.close();
			if(client!=null) client.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	class ClientOwnThread implements Runnable{
		public void run() {
			try {
				while(isConnected){
					String str=(String)input.readObject();
					textArea.append(str+"\n");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			finally{
				disConnect();
			}
		}
	}
	
	private class TextFieldListener implements ActionListener{
		public void actionPerformed(ActionEvent arg0) {
			str=textField.getText().trim();
			textField.setText("");
			
			try {
				output.writeObject(str);
				output.flush();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}
}

 

0
1
分享到:
评论

相关推荐

    Word版,Python GUI设计——Tkinter菜鸟编程(上、中、下)

    ### Python GUI设计——Tkinter基础知识详解 #### 一、Tkinter简介 Tkinter是Python标准库中的一个图形用户界面(GUI)工具包,它提供了一系列的控件来帮助开发者快速构建用户界面。由于其易用性和跨平台特性,...

    java菜鸟教程_JAVA菜鸟教程_

    【Java菜鸟教程】是针对初学者精心编写的教程,旨在帮助新手快速掌握Java编程语言的基础知识。本教程全面覆盖了Java的核心概念和技术,是学习Java编程的理想起点。 首先,Java是一种面向对象的编程语言,由Sun ...

    Java学生管理系统——菜鸟

    【Java学生管理系统——菜鸟】 Java学生管理系统是一款针对初学者设计的项目,旨在帮助他们理解和实践Java编程语言以及数据库管理的基本概念。这个系统主要是用来管理学生的信息,如姓名、学号、年龄、专业等,同时...

    2019最新Python——GUI_tkinter学习资料整理,可直接当作手册使用参考

    根据提供的文件信息,下面将介绍有关Python GUI编程中Tkinter库的知识点。 首先,Tkinter是Python的标准GUI库,它提供了一组丰富的控件来创建窗口应用程序。学习资料按照目录结构,从基础到高级功能逐一介绍各个...

    从Java菜鸟到专家的资料

    2. **Think In Java.chm**:这是经典的《深入思考Java》电子版,作者Bruce Eckel深入浅出地讲解了Java语言的核心概念,包括面向对象编程、集合框架、多线程、异常处理等内容,是Java初学者必读的书籍之一。...

    Java图解创意编程:从菜鸟到互联网大厂之路.pptx

    "Java图解创意编程:从菜鸟到互联网大厂之路" 《Java图解创意编程:从菜鸟到互联网大厂之路》这本书是一本面向初学者的编程书籍,旨在帮助读者从零基础开始学习Java编程,并逐步掌握互联网大厂常用的核心技术。本书...

    java学习进阶之路,如果从一个菜鸟进阶成大神(csdn)————程序.pdf

    Java学习进阶是一个系统的过程,涉及多个层面的知识和技能。以下是一个详细的指南,帮助你从初学者逐步成长为Java开发的大神。 1. **编程基础** - **数据结构与算法**:这是所有程序员的基石。熟悉数组、链表、...

    [网盘]java程序员由菜鸟到笨鸟.pdf

    ### Java程序员成长之路——从菜鸟到笨鸟 #### 一、引言 《Java程序员由菜鸟到笨鸟》是一本由曹胜欢编写的书籍,旨在帮助初学者掌握Java编程的基础知识,并逐步进阶至更高级的应用场景。本书不仅适合初学者作为...

    runoob菜鸟教程的java教程

    Java编程语言是一种高级编程语言,由Sun Microsystems公司(现为...菜鸟教程中的Java教程是一个很好的学习资源,它从基础知识讲起,逐步深入,对于初学者而言,通过实例和实践来掌握Java编程是一条有效的学习路径。

    java菜鸟学习第一步-java基础语法

    Java是一种广泛应用于Android开发、Web开发、企业软件开发等领域的编程语言。本文将从Java的起源、特点、文件说明、语法等方面对Java基础语法进行详细介绍。 Java的起源 Java语言的前身是Oak语言,由Sun公司开发,...

    Java培训教程 菜鸟到高手

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。"Java培训教程 菜鸟到高手"是一套旨在帮助初学者全面掌握Java编程技能的教程。这个教程的目标是通过系统性的学习,将新手逐步引领至高级...

    Java菜鸟专用很好

    "Java菜鸟专用很好"这个标题暗示了Java是适合初学者入门的语言,而描述中的“菜鸟一用就会”进一步强调了其易于理解和学习的特性。 Java语言的发展历史始于1991年,由James Gosling领导的Green小组为数字家电开发了...

    Java菜鸟进阶宝典

    【Java菜鸟进阶宝典】是一份专为Java初学者准备的综合学习资源,涵盖了从基础知识到高级技术的广泛内容,旨在帮助新手快速提升技能,成为熟练的Java开发者。这份资料包包含了多个主题,覆盖了Java开发的核心领域,如...

    c语言经典菜鸟编程实例

    "C语言经典菜鸟编程实例"是针对初学者设计的一系列教程,旨在帮助新手掌握C语言的基础编程技能。以下是对这个主题的详细展开: 1. **C语言简介**:C语言是由Dennis Ritchie在1972年开发的,它是一种结构化编程语言...

    java菜鸟教程

    Java是一种广泛使用的面向对象的高级编程语言,它是由Sun Microsystems公司在1995年推出的。Java的设计初衷是实现一种可以在各种不同设备和平台上运行的编程语言。为了达到这个目标,Java被设计为具有良好的跨平台...

    JAVA初学者笔记 使用JAVA理解逻辑基础-菜鸟入门(简单易懂)

    在编程领域,Java是一种广泛应用的高级编程语言,尤其适合初学者。本文将从基础出发,帮助你理解和掌握Java编程的基本概念。 首先,了解什么是程序。程序是一系列有序指令的集合,设计的目的是让计算机执行特定的...

    Java菜鸟入门手册

    通过上述知识点的梳理,我们可以看到《Java菜鸟入门手册》涵盖了Java编程语言的基础知识、面向对象编程的核心概念、网络编程的技术要点以及Java Web开发的实际案例。这些内容不仅适合Java初学者作为入门指南,也为...

    菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华

    菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华...

Global site tag (gtag.js) - Google Analytics