基于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

你可能感兴趣的:(java,thread,.net,socket,swing)