`

socket即时消息程序

    博客分类:
  • J2EE
阅读更多
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;
}
}
}
分享到:
评论

相关推荐

    基于Java实现的socket即时通信系统

    本项目"基于Java实现的socket即时通信系统"是针对初学者设计的一个实践项目,旨在帮助他们更好地理解和运用Java的网络编程技术。 首先,我们要理解Java中的Socket。Socket是网络通信的基本单元,它为两台计算机之间...

    Java_socket即时通信程序

    Java Socket即时通信程序是一种基于Java编程语言实现的网络通信机制,它允许两个应用程序通过网络进行数据交换。在本项目中,我们有服务器端(TT_S)和客户端(TT_C)两个部分,它们协同工作,实现了多用户之间的...

    即时聊天程序java socket swing

    在即时聊天程序中,服务器端创建一个 Socket 服务,监听特定端口等待客户端连接;客户端则通过 Socket 连接到服务器,建立连接后,双方就可以通过输入输出流进行数据交换,实现消息传递。 2. **C/S 架构** 客户端-...

    C# winform Socket 即时通讯

    WinForms是一个用于构建Windows桌面应用程序的框架,我们可以在WinForms中创建用户界面,如文本框、按钮等控件,以便用户输入消息并显示接收到的消息。例如,一个文本框用于输入消息,一个按钮用于发送消息,另一个...

    socket即时聊天源码

    Socket即时聊天源码是计算机网络通信领域中的一个重要实践案例,它涉及到网络编程、多线程、数据传输等关键概念。在此,我们将深入探讨这些知识点,以便更好地理解和学习这些源代码。 首先,`Socket`是网络编程的...

    基于Socket的网络即时通信系统_即时通信_

    Socket是Internet协议族中的核心组件,它为应用程序提供了低级别的网络通信接口。在即时通信系统中,Socket扮演着连接两端用户的关键角色,使得数据能够在客户端和服务器之间高效传输。 1. **Socket基础知识** - *...

    socket聊天小程序

    10. **即时性**:由于基于TCP的Socket通信具有即时性,因此这个聊天程序可以实现实时的消息传递。 通过这个简单的聊天小程序,我们可以学习到Socket编程的基本流程,包括连接建立、数据传输以及连接关闭等环节,这...

    C# Socket即时通讯

    在本项目“C# Socket即时通讯”中,开发者通过C#编程语言和Socket技术,模仿了QQ的功能,实现了在局域网内的即时通讯功能。下面我们将详细探讨这个项目所涉及的关键知识点。 1. **C#语言**:C#是微软公司推出的一种...

    基于socket的聊天程序

    8. **事件驱动编程**:聊天程序可能采用了事件驱动的编程模式,如当用户点击发送按钮时,触发发送事件,将消息通过Socket发送到服务器。 9. **错误处理**:在实际编程中,必须考虑网络异常、数据传输错误等情况,...

    基于Socket的即时通讯系统

    标题中的“基于Socket的即时通讯系统”是指使用Socket编程技术构建的一种实时通信应用程序,它允许用户之间快速交换信息。在描述中提到了该系统是在Delphi软件环境下开发的,这表明设计者使用了Delphi这一集成开发...

    java socket开发即时通讯服务器

    Java Socket 开发即时通讯服务器是构建实时通信系统的关键技术之一,尤其在企业级应用、在线游戏、聊天室等场景中广泛应用。本篇将深入探讨Java Socket在即时通讯服务器开发中的核心概念、步骤以及关键技术。 首先...

    Android socket即时通信

    在这个场景中,"Android socket即时通信"涉及到在Android设备上创建Socket客户端,以及在电脑端实现Socket服务器,实现跨平台的通信。 首先,我们来深入理解Socket。Socket是网络编程的基本组件,它提供了进程间...

    java_chat_program.rar_socket java用户_socket即时通讯

    总的来说,这个Java Socket即时通讯程序实例提供了学习和实践网络编程、用户认证和消息传递机制的好机会。通过深入分析和理解源代码,我们可以更好地掌握这些关键技能,并能应用于更复杂的网络应用开发中。

    JAVA即时通讯+P2P+socket

    本项目利用Java的Socket编程技术,实现了一个简单的类QQ即时通讯程序,旨在提供基本的聊天功能。下面我们将深入探讨相关知识点。 首先,Java Socket编程是Java网络编程的基础,它提供了在网络之间两台计算机进行...

    基于socket的聊天程序设计与实现

    "基于socket的聊天程序设计与实现" 本文档主要讲述了基于socket的聊天程序设计与实现,包括C#客户端服务端的详细介绍。该设计基于Windows平台,以C语言为编程语言,实现局域网内的即时通信功能,即聊天的功能。 ...

    socket 异步 即时通讯

    在"CSDB5(能聊了)2011-11-16"这个压缩包文件中,可能包含了实现异步Socket即时通讯系统的源代码示例,包括客户端(client)和服务器端(server)的实现,以及可能用于数据存储的数据库相关代码。通过对这些代码的...

    socket即时通讯.zip

    【标题】"socket即时通讯.zip"的项目是一个基于Spring Boot框架和MySQL数据库的即时通讯系统。这个系统的主要目标是提供实时的在线聊天功能,并且具备查看在线用户数量以及记录聊天历史的能力。 【核心技术与概念】...

    socket即时通讯 c语言编写

    Socket即时通讯是网络编程中的一个重要领域,主要用于实现不同设备间的通信。C语言因其简洁和高效,常被用于底层系统编程,包括socket编程。本篇将深入探讨如何使用C语言进行Socket即时通讯的开发。 首先,我们需要...

    winform Socket 聊天程序 有代码注释

    Socket编程在IT领域中是网络通信的基础,尤其在Windows Forms(winform)应用程序中,它为开发者提供了构建客户端-服务器应用的能力。这个“winform Socket 聊天程序”是针对初学者的一个理想学习资源,它包含有源...

    java Socket即时通讯

    Java Socket即时通讯是一种基于TCP/IP协议的网络通信方式,它允许两台计算机通过互联网进行双向数据传输。在Java中,Socket编程是实现客户端-服务器应用通信的基础,它提供了低级别的、面向连接的、可靠的字节流服务...

Global site tag (gtag.js) - Google Analytics