Java实现最简单局域网QQ

原创 2015年11月17日 21:12:33

        Java实现局域网QQ,这是最简单的实现了。整个系统只有一个服务器端和一个客户端,成功建立连接后,服务器端发消息给客户端,客户端发消息给服务器端。最上边的文本框是显示接收到的消息的,左边清屏按钮是把接收区域清空的,中间空白的是输入框,右边发送按钮是发送到另一端的,最下面的文本框显示QQ的连接状态。


先来一张图



源代码-服务器端

package server;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Server extends JFrame {
	private JButton b1 = new JButton("发送");
	private JButton b2 = new JButton("清屏");
	// 输入框
	private JTextField text = new JTextField(10);
	// 显示连接状态
	private JTextField info = new JTextField(10);
	// 显示文本框
	private JTextArea area = new JTextArea(10, 25);
	
	private DataInputStream in = null;
	private DataOutputStream out = null;
	// 是否和客户端已建立连接标识
	private boolean connect = false;
	
	public static void main(String[] args){
		Server frame = new Server();
		frame.setTitle("QQ-服务器端");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(600, 500);
		frame.setVisible(true);
		frame.showInfo("QQ服务器开始启动...");

		frame.workCycle(frame);
	}
	
	public Server() {
		// 为b1按钮添加监听事件,“发送”
		b1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (connect) {
					String str = text.getText();
					text.setText(""); // 设置为空
					
					Date date = new Date();
					DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					area.append(format.format(date) + '\n');
					area.append("我:" + str + '\n');
					try {
						out.writeBytes(str + '\n'); // 加上最后的'\n'为了在另一端显示换行
					} 
					catch (IOException ex) {
						ex.printStackTrace();
					}
				}
			}
		});
		
		// 为b2按钮添加监听事件,“清屏”
		b2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
					area.setText("");
			}
		});
		
		add(BorderLayout.NORTH, new JScrollPane(area));
		add(BorderLayout.CENTER, text);
		add(BorderLayout.SOUTH, info);
		add(BorderLayout.EAST, b1);
		add(BorderLayout.WEST, b2);
	}
	
	private void showInfo(String str) {
		info.setText(str);
	}
	
	public void workCycle(Server frame) {
		try {
			ServerSocket server = new ServerSocket(60000);
			
			Socket socket = server.accept();
			
			frame.showInfo("客户端连接成功...");
			connect = true;
			in = new DataInputStream(socket.getInputStream());
			out = new DataOutputStream(socket.getOutputStream());

			for (;;) { // 始终和客户端连接
				/*
				char c = in.readChar();
				if (c != '\n')
					area.append("" + c); // (String)c 这样转换竟然不行...
				else
					area.append("" + '\n');
				*/
				String str = in.readLine();
				
				Date date = new Date();
				DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				area.append(format.format(date) + '\n');
				area.append("client: " + str + '\n');
			}
		}
		catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}

源代码-客户端

package client;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Client extends JFrame {
	private JButton b1 = new JButton("发送");
	private JButton b2 = new JButton("清屏");
	// 输入框
	private JTextField text = new JTextField(10);
	// 显示连接状态
	private JTextField info = new JTextField(10);
	// 显示文本框
	private JTextArea area = new JTextArea(10, 25);
	
	private DataInputStream in = null;
	private DataOutputStream out = null;
	// 是否和服务器端已建立连接标识
	private boolean connect = false;
	
	public static void main(String[] args){
		Client frame = new Client();
		frame.setTitle("QQ-客户端");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(600, 500);
		frame.setVisible(true);
		frame.showInfo("QQ客户端开始启动...");

		frame.workCycle(frame);
	}
	
	public Client() {
		// 为b1按钮添加监听事件,“发送”
		b1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (connect) {
					String str = text.getText();
					text.setText(""); // 设置为空
					
					Date date = new Date();
					DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					area.append(format.format(date) + '\n');
					area.append("我:" + str + '\n');
					try {
						out.writeBytes(str + '\n'); // 加上最后的'\n'为了在另一端显示换行
					} 
					catch (IOException ex) {
						ex.printStackTrace();
					}
				}
			}
		});
		
		// 为b2按钮添加监听事件,“清屏”
		b2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
					area.setText("");
			}
		});
		
		add(BorderLayout.NORTH, new JScrollPane(area));
		add(BorderLayout.CENTER, text);
		add(BorderLayout.SOUTH, info);
		add(BorderLayout.EAST, b1);
		add(BorderLayout.WEST, b2);
	}
	
	private void showInfo(String str) {
		info.setText(str);
	}
	
	public void workCycle(Client frame) {
		try {
			Socket socket = new Socket("localhost", 60000);
			
			frame.showInfo("连接服务器成功...");
			connect = true;
			in = new DataInputStream(socket.getInputStream());
			out = new DataOutputStream(socket.getOutputStream());

			for (;;) { // 始终和服务器端连接
				/*
				char c = in.readChar();
				if (c != '\n')
					area.append("" + c); // (String)c 这样转换竟然不行...
				else
					area.append("" + '\n');
				*/
				String str = in.readLine();
				
				Date date = new Date();
				DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				area.append(format.format(date) + '\n');
				area.append("server: " + str + '\n');
			}
		}
		catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}





Java版局域网QQ

  • 2014年05月14日 22:49
  • 492KB
  • 下载

java版局域网聊天系统(即时通讯)

java版局域网聊天系统(即时通讯) UserListener.java 当前监听器 部分代码如下: package com.wgh.servlet; import com.wgh....
  • zhupengqq
  • zhupengqq
  • 2017年11月02日 21:41
  • 580

Java一步一脚印—通过简单的TCP网络编程实现局域网的聊天对话

import java.awt.*; import java.awt.Event; import java.awt.Window; import java.awt.event.ActionEvent;...
  • JY_He
  • JY_He
  • 2015年10月27日 21:55
  • 3616

基于Java的局域网简单聊天系统

  • 2015年12月23日 11:20
  • 4.71MB
  • 下载

基于Qt的局域网即时通信系统设计与实现(提供各种版本的源代码)

毕业设计:Linux系统下基于Qt的局域网即时通信系统设计与实现。主要实现了注册登录、好友管理、即时通信(文本、视频)、群组功能、消息管理、邮件收发、文件收发等主要功能。整体采用C/S框架,用户与服务...
  • shuideyidi
  • shuideyidi
  • 2014年07月29日 11:19
  • 14755

java如何实现进程间的通信?

先看看传统的进程间通信的手段: (1) 管道(PIPE) (2) 命名管道(FIFO) (3) 信号灯(Semphore) (4) 消息队列(MessageQueue) (5) 共享内存(S...
  • huzhigenlaohu
  • huzhigenlaohu
  • 2016年09月09日 17:10
  • 2221

java 进程间通讯的有几种方法?

进程间通信的方法主要有以下几种:   (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。   (2)命名管道(named pipe):...
  • Truong
  • Truong
  • 2014年09月12日 12:44
  • 20569

JAVAWEB+TOMCAT+MYSQL局域网服务器搭建简单流程

本文记录一下JAVAWEB项目的部署流程,供大家参考,有不对的地方,请批评指正! 1 装JAVA 1.1 下载安装 ORACLE官网下载最新JDK,下载地址http://www.or...
  • Jim_mark
  • Jim_mark
  • 2017年01月20日 09:15
  • 1286

仿QQ聊天程序(java)

仿QQ聊天程序 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 一、设计内容及要求 1.1综述 A.系统概述 我们要做的就是类...
  • zwx19921215
  • zwx19921215
  • 2014年03月17日 15:52
  • 83016

QQ源码Java实现

  • 2014年05月10日 23:43
  • 56KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java实现最简单局域网QQ
举报原因:
原因补充:

(最多只允许输入30个字)