`
leoizumi
  • 浏览: 93011 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java 聊天器 beta1

    博客分类:
  • J2EE
阅读更多
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;


public class ChatServer {
	boolean started = false;
	ServerSocket serverSocket = null;
	List<Client> clients = new ArrayList<Client>();
	
	public static void main(String[] args) {
		new ChatServer().start();
	}
	
	public void start() {
		try {
			serverSocket = new ServerSocket(7777);
			started = true;
		}
		catch(BindException e2) {
			System.out.println("端口使用中 ... ...");
			System.out.println("请关闭双关程序!");
			System.exit(0);
		}
		catch(Exception e) {
			e.printStackTrace();
		}
		try{
			while(started) {
			    Socket socket = serverSocket.accept();
			    Client client = new Client(socket);
				System.out.println("连接上了... ...");
				new Thread(client).start();
				clients.add(client);
			}
		} catch (IOException e) {
			System.out.println("Server 关闭");
		}finally {
	          try {
				serverSocket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}	
	}

	
	
	class Client implements Runnable {

		private Socket socket;
		private DataInputStream dis = null;
		private DataOutputStream dos = null;
		boolean bConnected = false;
		
		public Client(Socket socket) {
			this.socket = socket;
		
			try {
				dis = new DataInputStream(socket.getInputStream());
				dos = new DataOutputStream(socket.getOutputStream());
				bConnected = true;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		
		public void send(String str) {
			try {
				dos.writeUTF(str);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		
		
		public void run() {
			try{
          	while(bConnected) {
          		String str = dis.readUTF();
          		System.out.println(str);
          		
          		for(int i = 0;i<clients.size();i++) {
          			Client c = clients.get(i);
          			c.send(str);
          		}
          		
          		
          	}	
			}catch (EOFException e) {
				System.out.println("Server 关闭");
			}catch(IOException e) {
				e.printStackTrace();
			}finally {
				try {
					if(dis != null){
						dis.close();
					}
					if(dos != null){
						dos.close();
					}
					if(socket != null){
						socket.close();
						socket = null;
					}
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
		
	}
	
}

 

客户端 :

 

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class ChatClient extends Frame {
	
	Socket socket = null;
	TextField textField = new TextField();
	TextArea textArea = new TextArea();
	DataOutputStream dos = null;
	DataInputStream dis = null;
	boolean bContented = false;
	public void MainFrame() {
		setLocation(200, 200);
		setSize(400, 300);
		add(textArea,BorderLayout.NORTH);
		add(textField,BorderLayout.SOUTH);
		textField.addActionListener(new TextFieldListener());
		pack();
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				disConnect();
				System.exit(0);
			}
		});
		
		setVisible(true);
		connect();
		
		new Thread(new ClientTalk()).start();
	}
	
	private class TextFieldListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			String str = textField.getText();
			//textArea.setText(str);
			textField.setText("");
			try {
				dos.writeUTF(str);
				dos.flush();
				
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			
		}
		
	}
	
	
	public void disConnect() {
		try {
			dos.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	
	public void connect() {
		try {
			socket = new Socket("127.0.0.1",7777);
			dos = new DataOutputStream(socket.getOutputStream());
			dis = new DataInputStream(socket.getInputStream());
			bContented = true;
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	class ClientTalk implements Runnable {
		public void run() {
			try{
			while(bContented) {
				String str = dis.readUTF();
				//System.out.println(str);
				textArea.setText(textArea.getText() + str + '\n');
				
			}
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	public static void main(String[] args) {
		
		new ChatClient().MainFrame();
	}
	
}

 

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

    Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...

    15个经典的java课程设计实例

    1. 记事本:这个项目涉及到GUI(图形用户界面)的设计,使用Swing或JavaFX库创建文本编辑器,实现基本的文本编辑功能,如新建、打开、保存、复制、粘贴等。同时,需要理解文件I/O操作,以便保存和读取用户的文本数据...

    uc7.9+qq2011java通用版软件

    QQ_2011_beta1_build0012_ty.jar是这个软件的安装文件,同样需要解压后放入手机存储卡,然后通过手机找到并运行来安装。 “jar”文件是Java Archive的缩写,是一种用于打包Java类、资源文件和其他元数据的容器,...

    JAVA Swing小游戏实例与代码

    1. **吃金豆游戏**: 吃金豆游戏是一种经典的迷宫逃脱游戏,玩家控制的角色需要在充满障碍和敌人的迷宫中寻找并吃掉所有的金豆。在Java Swing中,我们可以使用JPanel自定义绘制游戏场景,通过KeyListener监听键盘...

    java 必练题目

    1. **池塘夜雨场景模拟生成器**: - 图形用户界面(GUI):使用Java Swing或JavaFX创建动态画面。 - 多线程:模拟雨滴下落、声音和闪电需要独立的线程处理。 - 随机数生成:用于决定雨滴位置、大小、速度和闪电频率...

    商业源码-编程源码-MolyX Board v2.7 beta 2.zip

    在编程和软件开发领域,源码是程序的基础,它是用人类可读的语言编写的,如Java、Python、C++或JavaScript。通过源码,开发者可以理解软件的工作原理,调试错误,或者添加新的功能。MolyX Board v2.7 beta 2的源码很...

    JAVA五子棋手机网络对战游戏的设计与实现(源代码+LW).zip

    《JAVA五子棋手机网络对战游戏的设计与实现》是一个基于Java编程语言的项目,它展示了如何构建一个手机上的实时网络对战游戏。这个项目涵盖了多个重要的IT知识点,包括网络编程、多线程、图形用户界面(GUI)设计...

    FiveChess-master_1.rar

    “FiveChess-master_1.rar”这个压缩包文件包含的是一个名为“FiveChess-master”的项目,它集成了五子棋游戏与在线聊天功能,是Java编程语言的一个实例应用。通过分析这个项目,我们可以深入理解Java在游戏开发和...

    ]盈盈通JSP网络聊天软件

    【盈盈通JSP网络聊天软件】是一款基于JavaServer Pages(JSP)技术构建的在线聊天应用程序,旨在提供一个实时沟通平台,使用户能够通过互联网进行便捷的交流。这款软件的UTF-8编码确保了多语言环境下的兼容性和正确...

    linux软件集合,mpkg软件

    1. **qq2011_beta1_build0011_unsigned.jad**:这是一个早期版本的QQ聊天应用的测试版,用于Java设备。jad文件是Java应用程序的描述文件,它包含有关应用程序的信息,而jar文件则包含实际的代码和资源。 2. **TTPod...

    Asmack登录

    Asmack是一个开源的Java库,它是Smack的Android版本,专为在Android平台上处理XMPP(可扩展消息传递和存在协议)而设计。XMPP是一种开放标准的即时通讯协议,广泛用于创建实时通信系统,如聊天应用、协作工具和在线...

    Nexus 7可支持无插件网页视频技术.docx

    Chrome 26 Beta是谷歌浏览器的一个版本,它首次将WebRTC集成进去,带来了自动填充和密码同步等功能,极大地提升了移动设备上的用户体验。开发者可以在不同设备间进行无缝的视频聊天,如Nexus 7和平板MacBook Air之间...

    ewebeditor v6.2商业版+5.5戒聊修改版商业版+ckeditor_开源版

    ckeditor是另一款非常流行的开源在线富文本编辑器,支持多种编程语言和平台,如PHP、ASP.NET、Java等。ckeditor_3.0.1_open.rar表示的是ckeditor的3.0.1版本的开源版本,开源意味着源代码公开,允许用户自由使用、...

    介绍J2EE常用Jar包的含义.doc

    - **应用场景**: 需要动态更新网页部分内容而不重新加载整个页面的应用场景,例如实时聊天系统中的消息列表更新。 3. **ant.jar** 和 **antlr.jar** - **用途**: `ant.jar`是Apache Ant的一部分,用于构建Java...

    基于Android平台的中国象棋设计与实现.doc

    - **架构选择**:采用MVC(Model-View-Controller)架构,将模型、视图与控制器分离,提高系统的可维护性和扩展性。 #### 2. 详细设计 - **用户界面模块**:设计简洁美观的界面,实现棋盘显示、棋子移动等功能。 -...

    Netty jar包

    1. Netty 概述: Netty 是由 JBoss 提供的开源框架,它提供了一套高度抽象的API,使得开发者可以更专注于业务逻辑,而不是底层的网络通信细节。Netty的核心特性包括:非阻塞I/O模型、内存池管理、零拷贝优化、高效...

Global site tag (gtag.js) - Google Analytics