- 浏览: 1656320 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
用java写的基于Socket的简单即时通讯程序,用户可以注册并登录,也可以作为游客身份使用.
/**//* *服务端 */ package edu.jlu.fuliang; import java.io.*; import java.net.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.*; public class Server extends JFrame implements Runnable { private ServerSocket server; private Socket connection; private OutputStream output; private InputStream input; private Thread outThread; private JTextArea display; private JTextField text1; private JButton startButton; public static void main(String args[]) { Server s = new Server(); s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public Server() { super("Server"); startButton = new JButton("Start the server"); text1 = new JTextField(20); display = new JTextArea(7, 30); display.setEditable(false); Container container = getContentPane(); container.setLayout(new BorderLayout()); container.add(startButton,BorderLayout.NORTH); container.add(new JScrollPane(display),BorderLayout.CENTER); container.add(text1,BorderLayout.SOUTH); /**//* * 给开始按钮添加监听器。 */ startButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { display.setText("启动服务器 "); startButton.setEnabled(false); try { //端口设为5000,最大连接请求为100个 server = new ServerSocket(5000, 100); connection = server.accept(); output = connection.getOutputStream(); input = connection.getInputStream(); output.write("连接成功! ".getBytes()); outThread = new Thread(Server.this); outThread.start(); } catch (IOException ee) { } } }); /**//* /*给文本域添加键盘监听器,按回车发送信息。 */ text1.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent ke) { if(ke.getKeyCode() == KeyEvent.VK_ENTER){ byte writeBytes[] = new byte[50]; String s = "Server: " + text1.getText() + ""; text1.setText(""); writeBytes = s.getBytes(); display.append(s+" "); try { output.write(writeBytes); } catch (IOException ee) { } if (s.trim().equals("Server: exit")) { outThread.stop(); quit(); } } } }); setSize(300, 400); setResizable(false); setVisible(true); } public void run() { while (true) { byte readBytes[] = new byte[50]; try { input.read(readBytes);//读去对方发送的消息 } catch (IOException e) { } String s = new String(readBytes); display.append(s+" "); if (s.trim().equals("Client: exit")) break; } quit(); } public void quit() { try { output.close(); input.close(); connection.close(); } catch (IOException e) { } startButton.setEnabled(true); } } /**//* *客户端 */ package edu.jlu.fuliang; import java.io.*; import java.net.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.*; public class Client extends JFrame implements Runnable { private Socket client; private OutputStream output; private InputStream input; private Thread outThread; private JTextArea display; private JTextField text1; private JButton startButton; private JMenu loginMenu = new JMenu("登录"); private JMenuItem register = new JMenuItem("注册"); private JMenuItem login = new JMenuItem("登录"); private JMenuBar bar = new JMenuBar(); private Register registerDlg ; private Login loginDlg; private RandomAccessFile file; public static void main(String args[]) { Client c = new Client(); c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public Client() { super("Client"); startButton = new JButton("Connect to server"); text1 = new JTextField(20); display = new JTextArea(7, 30); display.setEditable(false); loginMenu.add(register); loginMenu.add(login); bar.add(loginMenu); setJMenuBar(bar); Container container = getContentPane(); container.setLayout(new BorderLayout()); container.add(startButton,BorderLayout.NORTH); container.add(new JScrollPane(display),BorderLayout.CENTER); container.add(text1,BorderLayout.SOUTH); try { file = new RandomAccessFile(new File("E://login.txt"),"rw"); } catch (IOException e1) { e1.printStackTrace(); } registerDlg = new Register(this,file); loginDlg = new Login(this,file); startButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { display.setText("连接服务器"); startButton.setEnabled(false); try { client = new Socket("127.0.0.1", 5000); output = client.getOutputStream(); input = client.getInputStream(); outThread = new Thread(Client.this); outThread.start(); } catch (IOException ee) { } } }); text1.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent ke) { if(ke.getKeyCode() == KeyEvent.VK_ENTER){ byte writeBytes[] = new byte[50]; String s = loginDlg.getLoginName()+": " + text1.getText() + ""; text1.setText(""); writeBytes = s.getBytes(); display.append(s+" "); try { output.write(writeBytes); } catch (IOException ee) { } if (s.trim().equals(loginDlg.getLoginName()+": exit")) { outThread.stop(); quit(); } } } }); register.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { registerDlg.setVisible(true); } }); login.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { loginDlg.setVisible(true); } }); setSize(300, 400); setResizable(false); setVisible(true); } public void run() { while (true) { byte readBytes[] = new byte[1024]; try { input.read(readBytes); } catch (IOException e) { } String s = new String(readBytes); display.append(s+" "); if (s.trim().equals("Server: exit")) break; } quit(); } public void quit() { try { output.close(); input.close(); client.close(); } catch (IOException e) { } startButton.setEnabled(true); } } package edu.jlu.fuliang; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; public class Login extends JDialog{ private JTextField textField; private JButton loginButton; private RandomAccessFile file;//保存注册信息的文件 private String loginName = "guest";//保存登录者的名字,为登陆为guest; public Login(JFrame f,RandomAccessFile file){ super(f,"登陆",false); this.file = file; JPanel panel = new JPanel(); panel.add(new JLabel("昵称:")); textField = new JTextField(10); panel.add(textField); Container container = getContentPane(); container.setLayout(new BorderLayout()); container.add(panel,BorderLayout.NORTH); loginButton = new JButton("登陆"); container.add(loginButton,BorderLayout.SOUTH); setVisible(false); setBounds(100,200,200,200); loginButton.addActionListener(new LoginListener()); } public String getLoginName(){ return loginName; } /**//* * 登录监听器,当单击登陆按钮时,触发该事件 * 从文件中读取并查找是否注册过,如果没有找 * 到则弹出未注册警告。否则弹出欢迎对话框表 * 示欢迎 */ private class LoginListener implements ActionListener{ public void actionPerformed(ActionEvent e) { boolean flag = false; try { String name = textField.getText().trim(); textField.setText(""); file.seek(0); while(file.getFilePointer() < file.length()){ String nik = file.readUTF(); if(nik.equals(name)){ flag = true; loginName = name; break; } } if(!flag){ String warning="没有找到你的账号请先注册!"; JOptionPane.showMessageDialog(Login.this,warning,"警告",JOptionPane.WARNING_MESSAGE); }else{ String welcome="欢迎来聊天!"; JOptionPane.showMessageDialog(Login.this,welcome,"欢迎",JOptionPane.WARNING_MESSAGE); } Login.this.setVisible(false); } catch (IOException e1) { e1.printStackTrace(); } } } } package edu.jlu.fuliang; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; public class Register extends JDialog{ private String nickName; private JTextField textField; private JButton registerButton; private RandomAccessFile file;////保存注册信息的文件 public Register(JFrame f,RandomAccessFile file){ super(f,"注册",false); this.file = file; JPanel panel = new JPanel(); panel.add(new JLabel("昵称:")); textField = new JTextField(10); panel.add(textField); Container container = getContentPane(); container.setLayout(new BorderLayout()); container.add(panel,BorderLayout.NORTH); registerButton = new JButton("注册"); container.add(registerButton,BorderLayout.SOUTH); setVisible(false); setBounds(100,200,200,200); registerButton.addActionListener(new RegisterListener()); } /**//* * 注册监听器,当单击登注册按钮时,触发该事件 * 并向文件中写入注册信息。 */ private class RegisterListener implements ActionListener{ public void actionPerformed(ActionEvent e) { try { file.seek(file.length()); String str = textField.getText(); textField.setText(""); file.writeUTF(str); Register.this.setVisible(false); } catch (IOException e1) { e1.printStackTrace(); } } } }
发表评论
-
Builder模式遇到继承
2013-10-13 13:48 0interface Self<T extends ... -
Builder模式遇到集成
2013-10-13 13:47 0package com.qunar.qss.business. ... -
JVM调优Step by Step
2012-02-02 17:38 0现代的JVM能够适应于各种应用和领域,每个应用和领域的使用 ... -
commons-lang StringUtils#split的坑
2011-12-31 10:11 3160今天用StringUtils#split,陷入了前两个坑。需求 ... -
使用scala.sys.process包和系统交互
2011-07-19 00:00 6498在Java中我们可以使用Runtime.getRuntime( ... -
HttpClient Json请求工具
2011-05-05 18:32 17854发送Json请求,结果返回Json. public sta ... -
利用Java反射实现通用的Excel报表
2011-04-12 16:00 2022最近有很多客户报表需要提供客户下载,需要生成一个Excel的格 ... -
深入异常处理
2011-03-31 20:46 1808异常处理是写一个健壮 ... -
Java序列化注意一些点
2011-03-12 21:04 18521.序列化ID的问题: 标示了版本号,版本号一致才能反序列化成 ... -
Java动态代理
2010-09-24 00:34 4469Java提供了动态代理,可以完成AOP和装饰模式的功能,主要的 ... -
Java Timestamp是和ExtJS的timestamp不兼容
2010-08-09 20:33 3356Timestamp纳秒级别的,ExtJS的timestamp使 ... -
XML DocumentBuilder#parse(String str)
2010-07-06 15:55 3893DocumentBuilderFactory dbf = ... -
[备忘]String#split/substring的子串会共享原来大的String
2010-03-29 17:18 1499如果每次需要大字符串中的很小的一个字串,可能会引起内存中大量的 ... -
runtime.exec()执行进程block死锁问题
2010-01-18 21:39 5296最近在java代码中使用runtime.exec执行rsync ... -
URL中文问题
2010-01-08 14:46 10531最近使用HttpClient,和Java的java.net.U ... -
A TaskExecutor Impl
2009-12-07 11:33 1631import java.util.ArrayList; im ... -
使用XStream把Java对象XML/JSON格式的序列化和反序列化
2009-05-05 11:37 6244试了一下Thoughtworks的XStream,以测试驱动和 ... -
从《编程的未来》这篇文章想到C++和Java语言的爽与不爽
2009-05-01 23:44 3976从编程的未来这篇文 ... -
《Effetive Java》读书笔记二
2009-02-23 14:23 1604第二章 所有对象共有的 ... -
《Effetive Java》读书笔记一
2009-02-19 11:36 2188《Effetive Java》和 《Effective C++ ...
相关推荐
本项目“基于Socket的即时通讯系统”是针对这一领域的一个课程设计,通过源代码的形式提供了实现即时通讯功能的基础框架。Socket作为网络编程的核心组件,是构建此类系统的关键技术。 在即时通讯系统中,Socket扮演...
即时通讯服务器通常需要定义自己的通信协议,如基于文本的简单协议(如XML、JSON)或二进制协议(如protobuf)。协议设计应考虑以下几点: 1. **消息头**:标识消息的类型、长度等元信息。 2. **消息体**:承载实际...
本项目利用Java的Socket编程技术,实现了一个简单的类QQ即时通讯程序,旨在提供基本的聊天功能。下面我们将深入探讨相关知识点。 首先,Java Socket编程是Java网络编程的基础,它提供了在网络之间两台计算机进行...
Java基于Socket的进程间通信(IPC)是一种网络编程技术,常用于实现客户端和服务器之间的通信。在这个场景下,我们讨论的是一个简单的聊天小程序,它利用了Java的Socket库来搭建客户端与服务器之间的桥梁,实现数据...
总的来说,这个Java Socket即时通讯程序实例提供了学习和实践网络编程、用户认证和消息传递机制的好机会。通过深入分析和理解源代码,我们可以更好地掌握这些关键技能,并能应用于更复杂的网络应用开发中。
Java Socket即时通讯是一种基于TCP/IP协议的网络通信方式,它允许两台计算机通过互联网进行双向数据传输。在Java中,Socket编程是实现客户端-服务器应用通信的基础,它提供了低级别的、面向连接的、可靠的字节流服务...
在本文中,我们将深入探讨如何使用Java的Socket编程来实现一个简单的基于P2P(Peer-to-Peer)范型的即时聊天系统。P2P网络架构允许每个节点既是客户端也是服务器,这种模式使得数据传输更加分散,提高了系统的可扩展...
本项目"基于Java语言开发IM即时通讯聊天系统源码.zip"提供了完整的源代码,帮助开发者深入理解IM系统的实现机制。以下是这个系统的核心知识点及详细解析: 1. **Java编程基础**:作为基础,开发者需要熟悉Java编程...
【Java学习:基于Java的即时通讯项目】 在深入探讨基于Java的即时通讯(Instant Messaging,简称IM)项目之前,我们首先要理解Java语言的基础知识。Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems...
【总结】基于Java的即时通讯系统设计与实现结合了Java语言的优势,能够构建稳定、高效的即时通讯平台,满足用户多样化的需求。从娱乐、社交到商务应用,Java的即时通讯系统在现代社会中扮演着日益重要的角色。
Java基于Socket通信是一种常见的网络编程方式,主要用于实现客户端与服务器之间的数据交互。在这个场景中,我们看到"基于socket、mysql数据库和java组件、线程实现的qq基本通信"描述,这意味着我们将讨论如何利用...
论文中提出了JavaH i系统的设计和实现,JavaH i是一个基于Java虚拟机的跨平台即时通讯工具,具有跨平台、安全性、多线程和网络Socket编程的优点。 以下是该论文中的主要知识点: 1. 即时通讯的定义和分类:即时...
基于Socket的Java语言网络通讯机制和程序设计 pdf 基于SOCKET的JAVA网络编程1 pdf 基于SOCKET的JAVA网络编程 pdf ">用Java实现一个UDP通信模型 pdf 用Java实现一个Socket通信模型 pdf 用Java实现网络通讯 pdf ...
用Java实现一个UDP通信模型.pdf 用Java实现一个Socket通信模型.pdf 用Java实现网络通讯.pdf ...基于Socket的Java语言网络通讯机制和程序设计.pdf 基于SOCKET的JAVA网络编程1.pdf 基于SOCKET的JAVA网络编程.pdf ...
【标题】"socket即时通讯.zip"的项目是一个基于Spring Boot框架和MySQL数据库的即时通讯系统。这个系统的主要目标是提供实时的在线聊天功能,并且具备查看在线用户数量以及记录聊天历史的能力。 【核心技术与概念】...
在本文中,我们将深入探讨如何使用Java开发一个简单的即时通讯工具。即时通讯工具,或IM(Instant Messaging),是人们日常工作中不可或缺的一部分,它允许用户实时发送消息、进行语音或视频通话,甚至分享文件。...
【标题】:“基于JAVA的即时通讯项目.zip” 这个标题表明我们正在探讨的是一个使用Java编程语言实现的即时通讯(Instant Messaging, IM)项目。Java是一种广泛使用的、面向对象的编程语言,以其跨平台的特性而闻名...
"基于Java的即时通讯的设计与开发" 基于 Java 的即时通讯的设计与开发是计算机系毕业论文的主题,这个论文的主要目标是设计和开发一个安全、私有的、本地或本部门化的即时通讯工具。该论文首先介绍了即时通讯的概念...
在本项目中,"精选_基于JAVA和TCP SOCKET实现的P2P的局域网即时通信系统_源码打包" 提供了一个实现P2P(Peer-to-Peer)局域网即时通信系统的完整源码。这个系统利用了TCP/IP协议栈和Java编程语言,为用户提供了一种...
在提供的"MyQQ"文件中,可能包含了实现上述步骤的Java代码,模拟了类似QQ即时通讯的基本功能。通过运行这个程序,你可以看到如何实现客户端与服务器之间的消息传递。 学习这个例子时,要注意以下几点: - **异常...