`

[原]JavaSocket实现广播聊天室

阅读更多

Server:

 

<!---->package ChatIV;
import java.net.*;
import java.io.*;
import java.util.*;

//广播聊天室服务端
public class Server {
    
public static void main(String args[]){
        
try {
            ServerSocket ss 
= new ServerSocket(8186);//实现Socket
            List sockets = new ArrayList();//创建一个集合,保存文字消息
            while(true){
                Socket s 
= ss.accept();//监听8186
                sockets.add(s);//向集合中添加Socket的对象S,把听到的内容保存到集合中
                Thread t1 = new ChatThread(s,sockets);//线程
                t1.start();
            }
        } 
catch (IOException e) {
            e.printStackTrace();
        }
    }    
}
class ChatThread extends Thread{
    Socket s;
    List sockets;
    
public ChatThread(Socket s,List sockets){
        
this.s=s;
        
this.sockets=sockets;
    }
    
public void run(){
        
try {
            BufferedReader in 
= new BufferedReader(
                    
new InputStreamReader(s.getInputStream()));//包装成字符流
            while(true){
                String str 
= in.readLine();//读BufferedReader
                for(int i=0;i<sockets.size();i++){//利用For循环遍历集合
                    Socket s2 = (Socket)sockets.get(i);//创建Socket对象S2,强转成Socket,并获取下标
                    PrintWriter out = new PrintWriter(s2.getOutputStream());//文本流输出
                    out.println(str);//打印字符
                    out.flush();//刷新该流的缓冲
                }
            }
        } 
catch (IOException e) {}
        
finally{
            
try {
                s.close();
            } 
catch (IOException e) {}
        }
    }
}

 

Client:

 

<!---->package ChatIV;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//广播聊天室客户端
public class Client {
    JTextArea jta;
    JTextField jtf;
    BufferedReader in;
    PrintWriter out;
    
//Swing画一个界面
    private void initGUI(){
        JFrame f
=new JFrame("Client");
        f.setSize(
400,300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jta
=new JTextArea();
        jta.setEditable(
false);
        f.add(
new JScrollPane(jta));
        jtf
=new JTextField();
        f.add(jtf,
"South");
        f.setVisible(
true);
        jtf.addActionListener(
new ActionListener(){
            
public void actionPerformed(ActionEvent arg0) {
                String text
=jtf.getText();
                jtf.setText(
"");
                out.println(text);
                out.flush();
            }
        });
    }
    
//连接初始化
    private void initNet(){
        
try {
            Socket s 
= new Socket("127.0.0.1",8186);//创建Socket端口8186,端口号随意,避免常用端口即可
            out = new PrintWriter(s.getOutputStream());//文本流输出,利用Socket对象获得getOutputStream()
            in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } 
catch (IOException e) {
            e.printStackTrace();
        }
    }
    
//消息接收
    private void receive(){
        
try {
            
while(true){
                String str 
= in.readLine();//读BufferedReader
                if(str==null){
                    
return ;
                }
                jta.append(
""+str+"\n");//加载到JTextArea中,显示
            }
        } 
catch (IOException e) {
            e.printStackTrace();
        }
    }
    
private Client(){
        
this.initGUI();
        
this.initNet();
    }
    
public static void main(String args[]){
        Client c 
= new Client();
        c.receive();
    }
}
分享到:
评论
1 楼 50050192 2012-08-20  
扯蛋,误人

相关推荐

    基于javaSocket聊天室

    在这个“基于javaSocket聊天室”项目中,我们将会探讨如何利用Java的Socket API创建一个简单的聊天室,其中不仅支持文本聊天,还具备文件传输功能。 首先,让我们了解Java Socket的基本概念。Java Socket是Java提供...

    javasocket使用TCP协议实现的聊天室.pdf

    总结来说,Java Socket通过TCP协议实现了可靠的、双向的数据通信,适用于创建聊天室这样的实时通信应用。在这个过程中,服务器端负责监听连接,接收和解析消息,以及管理在线用户的状态。客户端则负责发起连接,发送...

    用Java Socket实现的一个多人聊天的小软件

    本项目“用Java Socket实现的一个多人聊天的小软件”就是一个很好的实践案例,它利用了Java的Socket和Thread类,创建了一个简单的多用户聊天室。下面将详细解释这个项目中的关键知识点。 首先,`Socket`在Java中...

    java多线程基于socket的简易聊天室源代码

    在这个基于Java的简易聊天室源代码中,开发者通过巧妙地结合这两者,实现了客户端与服务器端之间的实时通信。下面将详细解释这些知识点。 首先,让我们来理解多线程。在Java中,多线程允许程序同时执行多个任务,...

    java socket简单聊天室

    【Java Socket简单聊天室】是一个基于Java编程语言的网络通信应用示例,它实现了基本的多人聊天功能,但并未集成数据库进行用户数据的持久化存储。在这个项目中,主要涉及了两个关键组件:服务器端(Server)和...

    简单java socket在线聊天室

    总结起来,“简单java socket在线聊天室”项目展示了如何使用Java Socket和ServerSocket实现一个简单的多用户聊天应用,涉及了TCP连接、多线程、异常处理、数据传输等多个核心概念,是学习Java网络编程的好例子。...

    java的Socket实现的多人聊天程序

    Java的Socket实现的多人聊天程序是一个基于网络通信的项目,主要利用了Java的Socket类来构建客户端和服务端的通信桥梁。Socket是TCP/IP协议的一部分,它提供了两台计算机之间进行数据传输的基础。在这个项目中,...

    javaSocket聊天室

    在聊天室的实现过程中,我们通常会分为两个主要部分:服务器端(Server)和客户端(Client)。服务器端负责监听特定端口上的连接请求,并在有新的客户端连接时建立Socket连接。一旦连接建立,服务器可以接收客户端...

    javaSocket

    在给定的“javaSocket”压缩包中,包含了一个TCP聊天室服务器(TCPChatRoomServer)和一个对应的客户端(TCPChatRoomClient)的源代码。这些代码可以帮助我们理解如何在Java中实现基于Socket的网络通信。 首先,让...

    基于socket的聊天程序+课程设计报告(包括登录,注册,显示在线人数,JAVA)

    【标题】中的“基于socket的聊天程序”是指利用Socket编程技术构建的一款聊天应用程序。Socket是TCP/IP协议族的一部分,它提供了在网络中不同主机间进程通信的接口。在Java中,Socket类和ServerSocket类是实现客户端...

    javaQQ聊天室+SocketTCP

    在这个JavaQQ聊天室示例中,我们看到客户端(ChatRoomClient)和服务器(ChatRoomServer)使用Socket进行TCP通信来实现简单的聊天功能。以下是相关知识点的详细说明: 1. **Socket类**: Java中的Socket类代表TCP...

    基于JavaSocket多客户端并发通信聊天程序的设计与实现..docx

    - 启动新线程并通知聊天室中的其他客户端有关连接的变化。 2. **更新在线用户列表**: - 遍历客户端列表,获取每个客户端的名字。 - 将所有客户端的名字组合成一个字符串,并广播给所有在线用户。 3. **多线程...

    java聊天室程序

    在聊天室的实现中,可能还会用到线程安全的数据结构,如ConcurrentHashMap或Vector,来存储在线用户和他们的Socket对象,确保在多线程环境下数据的正确性。此外,为了提供用户友好的界面,客户端通常会使用Swing或...

    java socket,javasocket教程

    1. **简单聊天室** - 使用Java Socket实现简单的客户端/服务器模型,客户端发送消息到服务器,服务器广播给所有在线客户端。 2. **文件传输** - 基于Socket实现文件的上传和下载功能,通过流传输大文件。 3. **...

    JAVA Socket 经典教程

    - **聊天应用**:基于Socket的简单聊天室,客户端发送消息到服务器,服务器广播给所有在线用户。 - **文件传输**:通过Socket实现实时文件传输,客户端请求,服务器响应并发送文件。 - **分布式服务**:微服务...

    java网络编程 socket

    - 即时通讯:聊天室应用,服务器接收多个客户端的消息并广播给其他在线客户端。 - 游戏联机:玩家通过Socket连接服务器,进行实时对战。 六、Java网络编程进阶 - 多线程:当服务器需要同时处理多个客户端连接时,...

Global site tag (gtag.js) - Google Analytics