- 浏览: 351859 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (160)
- webservice (2)
- 数据库开发 (9)
- LINUX (6)
- 团队协作 (5)
- 前端技术 (4)
- J2EE (31)
- web服务器 (9)
- 经验常识 (12)
- 开发工具 (17)
- 项目管理 (7)
- 重构与设计模式 (8)
- 安全技术 (1)
- 并发编程 (1)
- 移动互联网 (2)
- 编码风格 (1)
- 领域建模 (1)
- 随想杂记 (12)
- 翻译 (2)
- 问题排查 (2)
- 数据挖掘 (4)
- 软件架构 (1)
- java语言基础知识 (13)
- 文件读写 (1)
- mac研发笔记 (1)
- 网络问题 (1)
- python学习 (0)
- Java8新特性 (1)
- soft kes collections (1)
最新评论
-
cremains:
...
java8新特性学习笔记 -
bingyingao:
guooo 写道很好的总结,不知能否转载?可以,多谢关注
又四年了,再看如何快速融入一个新团队 -
guooo:
很好的总结,不知能否转载?
又四年了,再看如何快速融入一个新团队 -
omeweb:
又过了好几年了,有啥新感悟没有?
两年已过去,再看该如何快速融入新团队 -
kely39:
感谢楼主,问题已解决
包冲突问题的解决方法
package com.chat;
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
/**
* socket写的一个聊天程序,测试方法:打开多个cmd,输入telnet localhost 10000,即可开始聊天
* @author bingyingao
*
*/
public class Server extends ServerSocket {
private static ArrayList User_List = new ArrayList();
private static ArrayList Threader = new ArrayList();
private static LinkedList Message_Array = new LinkedList();
private static int Thread_Counter = 0;
private static boolean isClear = true;
protected static final int SERVER_PORT = 10001;
protected FileOutputStream LOG_FILE = new FileOutputStream(
"d:/connect.log", true);
public Server() throws FileNotFoundException, IOException {
super(SERVER_PORT);//指定服务器所监控的端口
new Broadcast();
// append connection log
Calendar now = Calendar.getInstance();
String str = "[" + now.getTime().toString()
+ "] Accepted a connection\015\012";
byte[] tmp = str.getBytes();
LOG_FILE.write(tmp);
try {
while (true) {
Socket socket = accept();
new CreateServerThread(socket);
}
} finally {
close();
}
}
public static void main(String[] args) throws IOException {
new Server();
}
// --- Broadcast
class Broadcast extends Thread {
public Broadcast() {
start();
}
public void run() {
while (true) {
if (!isClear) {
String tmp = (String) Message_Array.getFirst();
for (int i = 0; i < Threader.size(); i++) {
CreateServerThread client = (CreateServerThread) Threader
.get(i);
client.sendMessage(tmp);
}
Message_Array.removeFirst();
isClear = Message_Array.size() > 0 ? false : true;
}
}
}
}
// --- CreateServerThread
class CreateServerThread extends Thread {
private Socket client;
private BufferedReader in;
private PrintWriter out;
private String Username;
public CreateServerThread(Socket s) throws IOException {
client = s;
in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
out.println("--- Welcome to this chatroom ---");
out.println("Input your nickname:");
start();
}
public void sendMessage(String msg) {
out.println(msg);
}
public void run() {
try {
int flag = 0;
Thread_Counter++;
String line = in.readLine();
while (!line.equals("bye")) {
if (line.equals("l")) {
out.println(listOnlineUsers());
line = in.readLine();
continue;
}
if (flag++ == 0) {
Username = line;
User_List.add(Username);
out.println(listOnlineUsers());
Threader.add(this);
pushMessage("[< " + Username + " come on in >]");
} else {
pushMessage("<" + Username + ">" + line);
}
line = in.readLine();
}
out.println("--- See you, bye! ---");
client.close();
} catch (IOException e) {
} finally {
try {
client.close();
} catch (IOException e) {
}
Thread_Counter--;
Threader.remove(this);
User_List.remove(Username);
pushMessage("[< " + Username + " left>]");
}
}
private String listOnlineUsers() {
String s = "-+- Online list -+-\015\012";
for (int i = 0; i < User_List.size(); i++) {
s += "[" + User_List.get(i) + "]\015\012";
}
s += "-+---------------------+-";
return s;
}
private void pushMessage(String msg) {
Message_Array.addLast(msg);
isClear = false;
}
}
}
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
/**
* socket写的一个聊天程序,测试方法:打开多个cmd,输入telnet localhost 10000,即可开始聊天
* @author bingyingao
*
*/
public class Server extends ServerSocket {
private static ArrayList User_List = new ArrayList();
private static ArrayList Threader = new ArrayList();
private static LinkedList Message_Array = new LinkedList();
private static int Thread_Counter = 0;
private static boolean isClear = true;
protected static final int SERVER_PORT = 10001;
protected FileOutputStream LOG_FILE = new FileOutputStream(
"d:/connect.log", true);
public Server() throws FileNotFoundException, IOException {
super(SERVER_PORT);//指定服务器所监控的端口
new Broadcast();
// append connection log
Calendar now = Calendar.getInstance();
String str = "[" + now.getTime().toString()
+ "] Accepted a connection\015\012";
byte[] tmp = str.getBytes();
LOG_FILE.write(tmp);
try {
while (true) {
Socket socket = accept();
new CreateServerThread(socket);
}
} finally {
close();
}
}
public static void main(String[] args) throws IOException {
new Server();
}
// --- Broadcast
class Broadcast extends Thread {
public Broadcast() {
start();
}
public void run() {
while (true) {
if (!isClear) {
String tmp = (String) Message_Array.getFirst();
for (int i = 0; i < Threader.size(); i++) {
CreateServerThread client = (CreateServerThread) Threader
.get(i);
client.sendMessage(tmp);
}
Message_Array.removeFirst();
isClear = Message_Array.size() > 0 ? false : true;
}
}
}
}
// --- CreateServerThread
class CreateServerThread extends Thread {
private Socket client;
private BufferedReader in;
private PrintWriter out;
private String Username;
public CreateServerThread(Socket s) throws IOException {
client = s;
in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
out.println("--- Welcome to this chatroom ---");
out.println("Input your nickname:");
start();
}
public void sendMessage(String msg) {
out.println(msg);
}
public void run() {
try {
int flag = 0;
Thread_Counter++;
String line = in.readLine();
while (!line.equals("bye")) {
if (line.equals("l")) {
out.println(listOnlineUsers());
line = in.readLine();
continue;
}
if (flag++ == 0) {
Username = line;
User_List.add(Username);
out.println(listOnlineUsers());
Threader.add(this);
pushMessage("[< " + Username + " come on in >]");
} else {
pushMessage("<" + Username + ">" + line);
}
line = in.readLine();
}
out.println("--- See you, bye! ---");
client.close();
} catch (IOException e) {
} finally {
try {
client.close();
} catch (IOException e) {
}
Thread_Counter--;
Threader.remove(this);
User_List.remove(Username);
pushMessage("[< " + Username + " left>]");
}
}
private String listOnlineUsers() {
String s = "-+- Online list -+-\015\012";
for (int i = 0; i < User_List.size(); i++) {
s += "[" + User_List.get(i) + "]\015\012";
}
s += "-+---------------------+-";
return s;
}
private void pushMessage(String msg) {
Message_Array.addLast(msg);
isClear = false;
}
}
}
发表评论
-
log4j关键点
2013-09-25 19:43 1056日志级别 级别顺序(低到高): DEBUG < INFO ... -
java集合排序
2013-09-24 19:18 1114java对象集合排序在开发中使用非常广泛,需要重点理解,而它实 ... -
关于java.lang.OutOfMemoryError的参数配置误区
2013-09-10 15:10 1121这两天在本机用eclipse的jetty插件跑项目,老是抛出一 ... -
spring这样的来配置一些常量很方便
2013-09-03 09:48 2493<util:list id="haidilao ... -
快速查找线程死锁(展苍)
2012-12-23 13:25 0Thread dump Thread dump是比较容易查找 ... -
javap查看虚拟机为你做了什么
2012-12-02 15:38 556public class Test { publi ... -
javaweb开发乱码问题整理
2012-03-15 14:01 995j2ee方面的开发总会遇到各种各样的乱码问题,总想抽空整理一下 ... -
用正则表达式扣出字符串中指定的多处内容
2011-12-26 15:29 1447截取打印出所有<record></recor ... -
java反射机制学习
2011-11-19 13:01 1036反射基本概念: 在java ... -
java匿名内部类使用场景列举
2011-11-18 10:57 2608java内部类是怎么一回事?匿名内部类何时会用到,之前一直很模 ... -
使用UUID生成32位ID
2011-11-14 11:11 21320UUID(Universally Unique Identif ... -
java数据类型介绍
2011-11-09 14:34 952java数据类型介绍 简单类型大小范围/精度 ... -
Exception点滴
2011-11-08 14:24 943java.lang.reflect.UndeclaredThr ... -
将set集合转为list并对对象进行排序
2011-11-06 15:09 7736之前用hibernate的时候,遇到一对多的表结构。比如班级( ... -
src地址为空导致两次进入到action请求地址
2011-10-29 13:05 1526今天用struts开发一个页面,奇怪的是我点了一次提交,达到目 ... -
struts标签与ognl表达式用法点滴
2011-10-27 18:43 1401struts标签的使用中,会涉及一些比较细的点儿,汇总一下,以 ... -
struts2第四回:工作流程解析
2011-10-14 15:18 872这两天没什么任务,就想研究一下struts2的源码,看了半天, ... -
struts2第三回:自定以拦截器
2011-10-13 19:14 1093实现一个拦截器并调用。 ============下面是Logi ... -
struts2第二回:防止重复提交
2011-10-13 18:51 2261基本原理:用户访问做了重复提交的页面,服务器会生成一个令牌,这 ... -
include与jsp:include与s:action与s:include与iframe用法汇总
2011-10-13 13:47 207101.<%@ include file="../ ...
相关推荐
本项目"基于Java实现的socket即时通信系统"是针对初学者设计的一个实践项目,旨在帮助他们更好地理解和运用Java的网络编程技术。 首先,我们要理解Java中的Socket。Socket是网络通信的基本单元,它为两台计算机之间...
Java Socket即时通信程序是一种基于Java编程语言实现的网络通信机制,它允许两个应用程序通过网络进行数据交换。在本项目中,我们有服务器端(TT_S)和客户端(TT_C)两个部分,它们协同工作,实现了多用户之间的...
在即时聊天程序中,服务器端创建一个 Socket 服务,监听特定端口等待客户端连接;客户端则通过 Socket 连接到服务器,建立连接后,双方就可以通过输入输出流进行数据交换,实现消息传递。 2. **C/S 架构** 客户端-...
WinForms是一个用于构建Windows桌面应用程序的框架,我们可以在WinForms中创建用户界面,如文本框、按钮等控件,以便用户输入消息并显示接收到的消息。例如,一个文本框用于输入消息,一个按钮用于发送消息,另一个...
Socket即时聊天源码是计算机网络通信领域中的一个重要实践案例,它涉及到网络编程、多线程、数据传输等关键概念。在此,我们将深入探讨这些知识点,以便更好地理解和学习这些源代码。 首先,`Socket`是网络编程的...
Socket是Internet协议族中的核心组件,它为应用程序提供了低级别的网络通信接口。在即时通信系统中,Socket扮演着连接两端用户的关键角色,使得数据能够在客户端和服务器之间高效传输。 1. **Socket基础知识** - *...
10. **即时性**:由于基于TCP的Socket通信具有即时性,因此这个聊天程序可以实现实时的消息传递。 通过这个简单的聊天小程序,我们可以学习到Socket编程的基本流程,包括连接建立、数据传输以及连接关闭等环节,这...
在本项目“C# Socket即时通讯”中,开发者通过C#编程语言和Socket技术,模仿了QQ的功能,实现了在局域网内的即时通讯功能。下面我们将详细探讨这个项目所涉及的关键知识点。 1. **C#语言**:C#是微软公司推出的一种...
8. **事件驱动编程**:聊天程序可能采用了事件驱动的编程模式,如当用户点击发送按钮时,触发发送事件,将消息通过Socket发送到服务器。 9. **错误处理**:在实际编程中,必须考虑网络异常、数据传输错误等情况,...
标题中的“基于Socket的即时通讯系统”是指使用Socket编程技术构建的一种实时通信应用程序,它允许用户之间快速交换信息。在描述中提到了该系统是在Delphi软件环境下开发的,这表明设计者使用了Delphi这一集成开发...
Java Socket 开发即时通讯服务器是构建实时通信系统的关键技术之一,尤其在企业级应用、在线游戏、聊天室等场景中广泛应用。本篇将深入探讨Java Socket在即时通讯服务器开发中的核心概念、步骤以及关键技术。 首先...
在这个场景中,"Android socket即时通信"涉及到在Android设备上创建Socket客户端,以及在电脑端实现Socket服务器,实现跨平台的通信。 首先,我们来深入理解Socket。Socket是网络编程的基本组件,它提供了进程间...
总的来说,这个Java Socket即时通讯程序实例提供了学习和实践网络编程、用户认证和消息传递机制的好机会。通过深入分析和理解源代码,我们可以更好地掌握这些关键技能,并能应用于更复杂的网络应用开发中。
本项目利用Java的Socket编程技术,实现了一个简单的类QQ即时通讯程序,旨在提供基本的聊天功能。下面我们将深入探讨相关知识点。 首先,Java Socket编程是Java网络编程的基础,它提供了在网络之间两台计算机进行...
"基于socket的聊天程序设计与实现" 本文档主要讲述了基于socket的聊天程序设计与实现,包括C#客户端服务端的详细介绍。该设计基于Windows平台,以C语言为编程语言,实现局域网内的即时通信功能,即聊天的功能。 ...
在"CSDB5(能聊了)2011-11-16"这个压缩包文件中,可能包含了实现异步Socket即时通讯系统的源代码示例,包括客户端(client)和服务器端(server)的实现,以及可能用于数据存储的数据库相关代码。通过对这些代码的...
【标题】"socket即时通讯.zip"的项目是一个基于Spring Boot框架和MySQL数据库的即时通讯系统。这个系统的主要目标是提供实时的在线聊天功能,并且具备查看在线用户数量以及记录聊天历史的能力。 【核心技术与概念】...
Socket即时通讯是网络编程中的一个重要领域,主要用于实现不同设备间的通信。C语言因其简洁和高效,常被用于底层系统编程,包括socket编程。本篇将深入探讨如何使用C语言进行Socket即时通讯的开发。 首先,我们需要...
Socket编程在IT领域中是网络通信的基础,尤其在Windows Forms(winform)应用程序中,它为开发者提供了构建客户端-服务器应用的能力。这个“winform Socket 聊天程序”是针对初学者的一个理想学习资源,它包含有源...
Java Socket即时通讯是一种基于TCP/IP协议的网络通信方式,它允许两台计算机通过互联网进行双向数据传输。在Java中,Socket编程是实现客户端-服务器应用通信的基础,它提供了低级别的、面向连接的、可靠的字节流服务...