要回家了,心就散了,毕业论文也做不下去了。闲着弄了弄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(500, 300);
setLocation(200, 300);
setVisible(true);
}
// 执行客户端
public void runClient()
{
try
{
connectToServer();
getStreams();
processConnection();
closeConnection();
} catch (EOFException eofException)
{
System.out.println("Server
本文介绍了一个简单的基于Socket的聊天室程序的设计与实现过程。包括服务端与客户端的代码示例,实现了多用户间的实时文本交流。
2022

被折叠的 条评论
为什么被折叠?



