⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.java

📁 java通信
💻 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 + -