`
yzhong_sa
  • 浏览: 90073 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

多线程聊天室。。

阅读更多
首先搞一个多线程的服务器端出来先:
思路:new 一个server  在一个死循环中不断检测socket连接,每简历一个连接就将它放入一个列表,并启动服务线程服务。
**
具体注释看程序啦。。SA没给我什么技术,但是规范的也学到5少。。
package com.sun.server;
/**
* @author Sun.zhong.
* @version 1.0
*/
import java.net.*;
import java.util.ArrayList;
import java.io.*;
/**
* @param client :socket object.
* @param ArrayList : list for all the socket connetions.
*
*/
public class Server2 extends Thread {
private Socket client;
private ArrayList list;
public Server2(Socket c,ArrayList list) {
  this.list = list;
  this.client = c;
}
/**
  * override the methord run().
  *
  */
public void run() {
  try {
   BufferedReader in = new BufferedReader(new InputStreamReader(client
     .getInputStream()));
   while (true) {
    String data = in.readLine();
    /**
     * update the information pool here.
     * InformationManager.setData(data);
     */
    /**
     * list all the socket and send the message to the client .
     */
    for(int i =0;i<list.size();i++){
     Socket socket = (Socket)list.get(i);
     if(socket != this.client){
      /**
       * broadcast the message from the information pool.
       * PrintWriter out = new PrintWriter(socket.getOutputStream());
          out.println(InformationManager.getData());
         
       */
      //broadcast the message from the client..
      PrintWriter out = new PrintWriter(socket.getOutputStream());
      out.println(data);
      out.flush();
     }
     }
   
    if (data.equals("end"))
     break;
   }
   client.close();
  } catch (IOException ex) {
  } finally {
  }
}
/**
* entrance to the app.
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
  ServerSocket server = new ServerSocket(1000);
  ArrayList list = new ArrayList();
  int i = 0;
  while (true) {
   // transfer location change Single User or Multi User
   Socket socket = server.accept();
   i++;
   list.add(socket);
   System.out.println("第 "+i+" 个client 建立连接");
   Server2 mu = new Server2(socket,list);
   mu.start();
  }
}
}
**
**
2.  服务器端就是甘啦。。。宜家到客户端:
客户端相对简单,只要将信息的读取同信息的发送分开线程来做就不会导致阻塞啦。。。
**
package com.sun.client;
/**
* @author Sun.zhong
* @version 1.0
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
*
* @param server:Socket object.
*
*/
public class Clients {
static Socket server;
/**
  * entrance to the client.
  * @param args
  * @throws UnknownHostException
  * @throws IOException
  */
public static void main(String args[]) throws UnknownHostException, IOException{
server=new Socket(InetAddress.getLocalHost(),1000);
**
BufferedReader br=new BufferedReader(new InputStreamReader(server.getInputStream()));
/**
  * start the get data thread.
  */
Clients c = new Clients();
GetDataThread  gdt = c.new GetDataThread(br);
gdt.start();
/**
  * read data from server.
  */
PrintWriter out=new PrintWriter(server.getOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
while(true){
  String str=wt.readLine();
  out.println(str);
  out.flush();
  if(str.equals("end")){
   break;
  }
 
}
}
class GetDataThread extends Thread{
  private BufferedReader br;
  public GetDataThread(BufferedReader br){
   this.br = br;
  }
  public void run(){
   try {
    while(true){
    System.out.println(br.readLine());
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}
}
**
记录:
hihi
hello
在搞毛
没搞毛

顶毛
哈哈
哈毛
顶你个肺
顶你个肺
顶你个肺



**
打完,收工!。
分享到:
评论
2 楼 yzhong_sa 2009-03-22  
如果不用NIO还有什么其他办法??
1 楼 aspserver 2009-03-22  
每个client 启动一个线程,这样性能开销不小哦。

相关推荐

    C++实现的Linux多线程聊天室

    《C++实现的Linux多线程聊天室》 在计算机编程领域,多线程技术是提升程序并发性能的重要手段,特别是在服务器端应用中,如聊天室。本项目以C++语言在Linux环境下实现了一个多线程聊天室,利用了Linux系统强大的多...

    Java多线程聊天室源码

    Java多线程聊天室源码是一个实用的编程示例,它展示了如何在Java环境中实现一个基本的多用户交互系统。这个源代码对于初学者来说是一个很好的学习资源,可以帮助他们理解和应用Java的多线程概念。下面我们将深入探讨...

    java多线程聊天室

    Java多线程聊天室是一个基于Java编程语言实现的实时通讯应用,它利用多线程技术来处理并发用户连接和通信。在这个项目中,有至少两个关键的类:Server和Control,它们分别扮演着服务器端和客户端控制台的角色。在...

    C#Socket多线程聊天室

    本项目"**C# Socket多线程聊天室**"就是一个典型的示例,它展示了如何利用C#的Socket类以及多线程技术创建一个简单的聊天应用。以下是关于这个项目的详细知识点: 1. **Socket编程**: Socket是网络通信中的基本组件...

    C#多线程聊天室

    【C#多线程聊天室】是一个基于C#编程语言实现的项目,它利用多线程技术构建了一个能够支持多人实时交流的聊天环境。在这个聊天室中,用户不仅可以参与公共的群聊,还能够进行一对一的私聊。下面将详细探讨这个项目中...

    基于swing的多线程聊天室

    【基于Swing的多线程聊天室】是一个Java应用程序,它利用了Swing库来构建图形用户界面(GUI)并采用多线程技术实现多用户之间的实时通信。Swing是Java Standard Edition(Java SE)的一部分,提供了丰富的组件库用于...

    CSocket多线程聊天室源码

    CSocket多线程聊天室源码是一个基于MFC(Microsoft Foundation Classes)库中的CSocket类实现的网络通信项目。此源码提供了在一个多线程环境中创建一个简单的聊天室功能,让多个用户能够实时交流。MFC是微软为...

    C#Socket 多线程聊天室B

    《C# Socket 多线程聊天室》 在IT领域,网络编程是不可或缺的一部分,而C#语言提供了强大的网络通信支持。本项目“C# Socket 多线程聊天室”是一个针对中高级开发者设计的实践案例,旨在展示如何利用C#的Socket库和...

    java基于socket/server的多线程聊天室程序,可以公聊和私聊。

    ### Java多线程聊天室程序知识点详解 #### 一、程序概述 本程序是一个基于Java Socket编程技术开发的多线程聊天室应用。它能够支持多个用户进行群聊或者私聊,通过网络通信来实现消息的实时传递。下面将详细介绍该...

    多线程聊天室

    《多线程聊天室:构建高效并发服务器》 在IT领域,尤其是网络编程中,多线程技术常常被用于构建高性能、高并发的服务器,如本文档所提及的"多线程聊天室"。服务器端的设计是整个系统的核心,它需要处理大量用户的...

    C#Socket 多线程聊天室A

    本项目"**C#Socket 多线程聊天室A**"是一个很好的学习资源,它展示了如何利用C#的Socket类进行网络通信以及如何通过多线程来处理并发用户的需求。 首先,我们要理解Socket。Socket是网络编程的基础,它提供了进程间...

    C# tcp 多线程聊天室

    本篇将深入探讨如何利用C#实现TCP多线程聊天室的核心知识点。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它确保了数据的正确顺序和完整性,适合用于需要高稳定性的应用,如...

    C++编写 win32控制台下 Socket通信 多线程 聊天室 服务器 客户端

    C++语言编写,SOCKET套接字通信,分服务器和客户端,多线程模型,Win32控制台。 首先聊天室分为服务端和客户端,通过TCP连接通信。运行顺序为: 1.首先打开服务服; 2.打开客户端,用户输入名字,连接到服务端后...

    一个多线程聊天室(C_S)的源代码

    一个多线程聊天室(C_S)的源代码 可以多开的聊天程序 试试看吧

    新项目基于TCP Socket实现的多线程聊天室程序c++源码(含服务端+客户端).zip

    新项目基于TCP Socket实现的多线程聊天室程序c++源码(含服务端+客户端).zip新项目基于TCP Socket实现的多线程聊天室程序c++源码(含服务端+客户端).zip新项目基于TCP Socket实现的多线程聊天室程序c++源码(含服务端+...

    java多线程聊天室附源码

    Java多线程聊天室是一种基于Java编程语言实现的实时通信应用,它利用了Java的多线程特性来处理多个客户端的并发连接。在本项目中,我们有两个主要的组件:SocketTestServer.jar(服务器端)和SocketTestClient.jar...

    能注册的TCP多线程聊天室

    【标题】"能注册的TCP多线程聊天室"是一个基于TCP/IP协议的网络通信程序,它具有用户注册功能,并且能够将用户信息保存到XML配置文件中。在这个系统中,多线程技术被用于提高服务性能和并发处理能力。 在TCP/IP通信...

Global site tag (gtag.js) - Google Analytics