当前位置:首页 > 开发 > 编程语言 > 网络编程 > 正文

socket即时消息程序

发表于: 2011-05-02   作者:bingyingao   来源:转载   浏览次数:
摘要: package com.chat; import java.io.*; import java.net.*; import java.util.*; import java.lang.*; /** *  socket写的一个聊天程序,测试方法:打开多个cmd,输入telnet localhost 10000,即可开始聊天 * @author bingyingao
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;
}
}
}

socket即时消息程序

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
最近一段时间在学习了SOCKET,下面是程序源代码,都是在VC6.0环境下,用WIN32控制台程序写的: 1.TC
1. 首先,要编写windows下socket程序,必须要加入Winsock支持 2. 服务端监听程序(Server.cpp) #incl
  上一小节,已经讲到可以每个人多说话,而且还没有限制,简单的来说,我们已经完成了聊天的功能
  上一小节讲到可以实现多客户端与服务器进行通讯,对于每一个客户端的连接请求,服务器都要分配
  上一小节我们讲了使用select来避免使用多进程的资源浪费问题。上次只是实现了从多个客户端发送
  这一小节将增加一个用户的结构体,用于保存用户的用户名和密码,然后发给服务器,然后在服务器
  接上一小节,本来是计划这一节用来讲数据库的增删改查,但是在实现的过程中,出现了一点小问题
  上一节已经完成了对用户的身份验证了,既然有了验证,那么接下来就能对不同的客户端进行区分了
  这一节应该是聊天程序的最后一节了,现在回顾我们的聊天程序,看起来还有很多功能没有实现,但
1.mystery引入 1)系统入侵步骤:系统发现->漏洞探测->漏洞利用->痕迹清除 2)扫描器分类
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号