`

基于TCP的多人聊天小程序

阅读更多

要回家了,心就散了,毕业论文也做不下去了。闲着弄了弄Socket。同时遇到了一些问题。

服务端ChatServer.java

package com.neusoft.socket.chat;

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

public class ChatServer {
    
// 存储不同客户端的线程
    public static Hashtable peopleList;

    
public static void main(String args[]) {
        ServerSocket server 
= null;
        Socket socket 
= null;

        peopleList 
= new Hashtable();
        
while (true{
            
try {
                
// 建立服务端
                server = new ServerSocket(8099);
            }
 catch (IOException e) {
            }

            
try {
                
// 开始监听
                socket = server.accept();
                InetAddress address 
= socket.getInetAddress();
                System.out.println(
"IP:" + address + " come in.");

            }
 catch (IOException e) {
            }

            
if (socket != null{
                
// 开启一条线程通讯
                new Server_thread(socket).start();
            }
 else {
                
continue;
            }

        }

    }

}


服务端线程Server_thread.java
package com.neusoft.socket.chat;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Hashtable;

public class Server_thread extends Thread {
    
// 客户端机器名
    String name = null;

    String keyName 
= null;

    String message 
= null;

    Socket socket 
= null;

    ObjectOutputStream out 
= null;

    ObjectInputStream in 
= null;

    Hashtable peopleList 
= null;

    
public Server_thread(Socket t) {
        socket 
= t;
        
try {
            
// 取得输入输出流对象
            in = new ObjectInputStream(socket.getInputStream());
            out 
= new ObjectOutputStream(socket.getOutputStream());
        }
 catch (IOException e) {
        }

    }


    
public void run() {

        
while (true{

            
try {
                
// 读取客户端消息
                message = (String) in.readObject();
                
// 把客户端线程存储到HASHTABLE
                name = socket.getInetAddress().toString();
                
if (!ChatServer.peopleList.containsKey(name)) {
                    ChatServer.peopleList.put(name, 
this);
                }


                
// 遍历HASHTABLE,把消息发送到每一个客户端,实现多人聊天
                Enumeration enum1 = ChatServer.peopleList.keys();
                
while (enum1.hasMoreElements()) {
                    keyName 
= (String) enum1.nextElement();
                    ((Server_thread) ChatServer.peopleList.get(keyName)).out
                            .writeObject(keyName 
+ "says:" + message);
                }

            }
 catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
 catch (IOException ee) {
                ee.printStackTrace();
            }

        }

    }

}

客户端:Client.java
package com.neusoft.socket.chat;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

public class Client extends JFrame {
    
private Container container;

    
private JTextField enterField;

    
private JTextArea displayArea;

    
private ObjectOutputStream output;

    
private ObjectInputStream input;

    
private String message = "";

    
private String chatServer;

    
private Socket client;

    
public Client(String host) {
        
//初始化聊天窗口
        super("my Client");
        chatServer 
= host;
        container 
= getContentPane();
        enterField 
= new JTextField();
        enterField.setEnabled(
false);
        enterField.addActionListener(
new ActionListener() {
            
public void actionPerformed(ActionEvent event) {
                sendData(event.getActionCommand());
            }

        }
);
        container.add(enterField, BorderLayout.SOUTH);
        displayArea 
= new JTextArea();
        container.add(
new JScrollPane(displayArea), BorderLayout.CENTER);
        setSize(
500300);
        setLocation(
200300);
        setVisible(
true);
    }


    
// 执行客户端
    public void runClient() {
        
try {
            connectToServer();
            getStreams();
            processConnection();
            closeConnection();
        }
 catch (EOFException eofException) {
            System.out.println(
"Server
分享到:
评论

相关推荐

    多人聊天小程序

    本文将深入探讨一个基于C++编程语言,在Visual Studio 2017环境下开发的“多人聊天小程序”。该程序集成了客户端与服务端的功能,实现了用户登录、注册、在线状态提示以及一对一的聊天功能,为用户提供了一个便捷的...

    简单的java多人聊天小程序

    【Java TCP多人聊天小程序详解】 在信息技术领域,网络通信是不可或缺的一部分,而TCP(传输控制协议)作为一种可靠的、面向连接的传输层协议,常用于构建稳定的通信系统。本项目“简单的Java多人聊天小程序”就是...

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

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

    Socket多人聊天小程序-Java.zip

    Socket多人聊天小程序是基于Java语言实现的一种网络通信应用,它利用了Java的Socket API来构建客户端和服务器端的通信桥梁,使得多个用户可以同时在线进行实时的文本交流。在这个项目中,我们将深入探讨Socket编程的...

    利用Qt使用TCP通信实现多人在线聊天室

    在本文中,我们将深入探讨如何使用Qt框架来创建一个基于TCP通信的多人在线聊天室,同时结合SQLite数据库来存储和检索聊天记录。首先,让我们理解TCP(传输控制协议)在网络通信中的作用,以及Qt库如何支持它。 TCP...

    基于UDP的多人聊天

    【标题】:“基于UDP的多人聊天” 在计算机网络通信领域,UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,常用于实时性要求较高的应用,如在线游戏、视频会议和多人聊天系统。...

    Socket多人聊天小程序

    【Java Socket 多人聊天小程序】是一个基于网络通信的项目,它使用了Java的Socket API来实现实时的多用户交互。在这个小程序中,我们主要关注三个关键组件:服务器端、客户端以及通信协议。 首先,**服务器端**是...

    C#多人聊天小程序

    本项目"**C#多人聊天小程序**"是利用C#实现的一个简单但实用的多用户聊天平台,它基于TCP(Transmission Control Protocol)网络传输协议进行数据交换,实现了用户之间的实时通信。 TCP是一种面向连接的、可靠的...

    北京科技大学自动化学院小学期多人聊天室linux嵌入式系统课程设计.zip

    本课程设计要求学生设计并实现一个基于Linux环境的多人聊天室应用。这一项目不仅能够加深学生对操作系统的理解,还能让他们接触到网络编程的实践,以及客户端-服务器模型的构建。学生需要通过本项目掌握TCP/IP协议、...

    C#实现多人聊天

    本项目“C#实现多人聊天”是利用C#语言构建的一个基础的网络通信应用,它允许多个用户通过TCP协议进行实时的文本聊天。下面我们将详细探讨这个项目的相关知识点。 1. **C#语言基础**: C#是一种面向对象的编程语言...

    java实现socket编程网络通信多人聊天室

    首先,Java中的Socket类是客户端与服务器端进行通信的接口,它基于TCP(传输控制协议)提供可靠的、面向连接的通信服务。在多人聊天室的实现中,服务器端通常会创建一个ServerSocket,监听特定的端口,等待客户端的...

    JAVA多人聊天室

    Socket提供了在网络间进行数据通信的能力,它是基于TCP/IP协议的,确保了数据的可靠传输。通过ServerSocket创建服务器端,监听特定端口,等待客户端的连接请求;Socket则用于创建客户端,连接到服务器。 2. **多...

    多人聊天系统--客户端

    多人聊天系统客户端是基于局域网的实时通讯应用,它允许网络中的多个用户进行文本、文件等信息的交流。这个程序是由Visual Studio 2010的MFC(Microsoft Foundation Classes)库用C++语言编写的,利用了socket通信...

    多人聊天室

    在本场景中,我们关注的是使用C++实现的多人聊天室,它基于select模型来处理并发的网络连接和数据传输。select模型是Unix/Linux系统中用于多路复用I/O的一种方法,能够有效地监控多个文件描述符(如套接字)的状态...

    小型多人聊天室

    【小型多人聊天室】是一个基于网络通信技术的项目,由北京圣思源开发,旨在提供一个简单的多人在线交流平台。这个聊天室系统的核心是实现客户端与服务器之间的实时数据传输,使得用户可以相互发送消息,进行实时对话...

    基于UDP的网络聊天程序客户端程序

    【基于UDP的网络聊天程序客户端程序】 UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,相比TCP(Transmission Control Protocol,传输控制协议),UDP在速度和延迟方面具有...

    基于c/s架构的JAVA聊天程序

    在IT领域,C/S(Client/Server)架构是一种常见的分布式应用结构,主要用于构建网络应用程序,如我们这里的"基于C/S架构的JAVA聊天程序"。在这个系统中,客户端(Client)负责用户交互,而服务器端(Server)处理...

    基于WCF&WPF的聊天室小程序.zip

    【标题】中的“基于WCF&WPF的聊天室小程序”是指一个使用Windows Communication Foundation (WCF) 和Windows Presentation Foundation (WPF) 技术构建的多人聊天应用。这个项目是作者在学期末根据所学知识设计和实现...

    C++基于socket的多线程聊天程序

    在聊天程序中,数据的发送和接收都是基于TCP协议的。 5. **消息传递**:聊天程序的核心是消息的收发。服务器需要监听端口,接受新连接,然后将接收到的消息广播给所有在线的用户。这需要实现一个循环接收和广播消息...

Global site tag (gtag.js) - Google Analytics