`
黄兆廷
  • 浏览: 8531 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

三步学会Java Socket编程--3

阅读更多
三步学会Java Socket编程--3

  设计原理:

   服务器端接受客户端的连接请求,同时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。

   {源码}


import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;

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 = 10000;
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编程。 **第一步:理解Socket** Socket,又称为“套接字”,是网络通信中的一个抽象概念,它封装了IP地址和端口号,是网络通信链路的句柄。在Java中,Socket和...

    三步学会Java Socket编程

    三步学会Java Socket编程,相当经典。

    三步学会Java Socket编程.doc

    本教程分为三步,旨在帮助初学者快速掌握Java中的Socket编程。 第一步是理解Socket的基本概念。Socket在计算机网络中通常被称为“套接字”,它定义了IP地址和端口号,是通信链路的句柄。Java中的Socket和...

    JAVA网络编程

    使用JAVA编写网络通信程序 .doc Java网络编程 MulticastSocket类的使用 .doc Java网络编程---IO部分学习笔记整理 .doc Java网络编程基础 Datagram类使用方法 (1) .doc ...Java基础 三步学会Java Socket编程(三).doc

    三步学会Java Socket编程.

    3. Socket是什么呢? 4. 你会使用它们吗? 什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。 UDP...

    Java基础_三步学会Java_Socket编程(一)

    很不错的java学习内容!!!三步学会Java_Socket,有心人请学习!!!

    java socket 编程

    三步学会java socket编程,简单易懂,详细!!!

    Java基础_三步学会Java_Socket编程(二)

    很不错的学习资源啊!!!!在实际的网络环境里,同一时间只对一个用户服务是不可行的。一个优秀的网络服务程序除了能处理用户的输入信息,还必须能够同时响应多个客户端的...在java中,实现以上功能特点是非常容易的。

    java socket编程

    java socket编程 简单学会socket

    三步学会socket

    socket开发指南:所谓socket 通常也称作"套接字",用于描述IP 地址和端口,是一个通信链的句柄。应用程 序通常通过"套接字"向网络发出请求或者应答网络请求...本文将Java Socket 编程分为三个 学习步骤,逐一为您讲解。

    两步学会JavaSocket编程

    【Java Socket编程基础】 Java Socket编程是Java网络编程的核心部分,允许两个网络应用程序之间进行双向通信。Socket提供了低级别的、面向连接的、基于TCP/IP的通信机制,它封装了网络通信的一些细节,使得开发者...

Global site tag (gtag.js) - Google Analytics