📄 server.java
字号:
package server;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
public class Server extends JFrame implements Runnable {
public JTextField enterField;
public JTextArea displayArea;
private ObjectOutputStream output;
private ObjectInputStream input;
private ServerSocket server;
public Socket connection;
private int counter = 1;
private LinkedList listMsg;
private HashSet listUsers;
private HashSet listChatThread;
public Server()throws IOException
{
super( "Server" );
Container container = getContentPane();
server = new ServerSocket( 5000 );
enterField = new JTextField();
enterField.setEnabled( false );
enterField.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event )
{
sendData(enterField.getText() );
enterField.setText("");
}
}
);
container.add( enterField, BorderLayout.NORTH );
displayArea = new JTextArea();
displayArea.setEnabled(false);
container.add( new JScrollPane( displayArea ),BorderLayout.CENTER );
setSize( 300, 150 );
setVisible( true );
listMsg=new LinkedList();
listUsers=new HashSet();
listChatThread=new HashSet();
}
/*
public void runServer()
{
try {
//while ( true ) {
waitForConnection();
//getStreams();
//processConnection();
//closeConnection();
++counter;
//}
}
catch ( EOFException eofException ) {
System.out.println( "Client terminated connection" );
}
catch ( IOException ioException ) {
ioException.printStackTrace();
}
}
private void waitForConnection() throws IOException
{
displayArea.setText( "Waiting for connection\n" );
//connection = server.accept();
new Thread(new Server()).start();
displayArea.append( "Connection " + counter +" received from: " +connection.getInetAddress().getHostName());
}
*/
private void getStreams() throws IOException
{
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
displayArea.append( "\nGot I/O streams\n" );
}
private void processConnection() throws IOException
{
String message = "SERVER>>> Connection successful";
int i=0;
//output.writeObject( message );
//output.flush();
enterField.setEnabled( true );
do {
try {
message = ( String ) input.readObject();
displayArea.append( "\n" + message );
displayArea.setCaretPosition(displayArea.getText().length());
message = "SERVER>>> Connection successful:"+i;
//i++;
output.writeObject( message );
output.flush();
}
catch ( ClassNotFoundException classNotFoundException ) {
displayArea.append( "\nUnknown object type received" );
}
} while ( !message.equals( "CLIENT>>> TERMINATE" ) );
}
public void run()
{
displayArea.setText( "Waiting for connection\n" );
while(true)
{
try{
connection = server.accept();
if(connection!=null)
{
displayArea.append("xin jin lian jie\n");
//getStreams();
// processConnection();
// closeConnection();
new ChatThread(connection,this).start();
}
else break;
}
catch(Exception e)
{
e.printStackTrace();
}
}
displayArea.append( "Connection " + counter +" received from: " +connection.getInetAddress().getHostName());
}
//向消息队列中添加消息
public void addMessge(Message msg)
{
synchronized(listMsg)
{
listMsg.addLast(msg);
}
}
//通知用户有新消息到达
public void notifyMsgcome()
{
Iterator it=listChatThread.iterator();
while (it.hasNext())
{
ChatThread ct=(ChatThread)(it.next());
synchronized(ct){
ct.comeMsg();
}
}
}
//返回用户列表
public String getUsers()
{
StringBuffer users=new StringBuffer();
synchronized(listUsers)
{
Iterator it=listUsers.iterator();
while(it.hasNext())
{
users.append(it.next());
users.append(";");
}
}
return users.toString();
}
//添加一个用户
public boolean addUser(String user,ChatThread ct)
{
synchronized(listUsers)
{
return (listUsers.add(user)&&listChatThread.add(ct));
}
}
//删除一个用户
public void delUser(String user,ChatThread ct)
{
displayArea.append("用户退出!!!!"+user);
synchronized(listUsers)
{
listUsers.remove(user);
listChatThread.remove(ct);
}
}
//获取一个消息
public String getMessage(String user)
{
String strMsg=null;
synchronized(listMsg)
{
for(int i=0;i<listMsg.size();i++)
{
Message msg=(Message)(listMsg.get(i));
if(msg.use(user))
{
strMsg=msg.getMsg(user);
if(listUsers.size()==msg.getUseCount())
{
listMsg.remove(i);
}
break;
}
}
}
displayArea.append("当前消息数量:"+listMsg.size());
return strMsg;
}
private void closeConnection() throws IOException
{
displayArea.append( "\nUser terminated connection" );
enterField.setEnabled( false );
output.close();
input.close();
connection.close();
}
private void sendData( String message )
{
try {
output.writeObject( "SERVER>>> " + message );
output.flush();
displayArea.append( "\nSERVER>>>" + message );
}
catch ( IOException ioException ) {
displayArea.append( "\nError writing object" );
}
}
public static void main( String args[] )
{
try{
Server application = new Server();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );//关闭窗口
WorkQueue queue=new WorkQueue(300);
queue.execute(application);
//new Thread( application).start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -