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

📄 server.java

📁 模拟最简易的聊天窗口界面
💻 JAVA
字号:
package com.biluo.web.commit;

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

public class Server extends JFrame {
		private JTextField enterField;
		private JTextArea displayArea;
		private ObjectOutputStream output;
		private ObjectInputStream input;
		private ServerSocket server;
		private Socket connection;
		private int counter = 1;
		
		public static void main( String args[] )
		{
		   Server server = new Server();		
		   server.setDefaultCloseOperation(
		     JFrame.EXIT_ON_CLOSE );			   
			server.runServer();	
		}
		
		//构造器:初始化swing组件
		public Server()
		{
		   super( "Server" );
		   Container 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,350  );		  
		   setVisible( true );
		}
		
		//运行服务器
		//服务器套接字需要两个,一个是欢迎套接字server,用来连接客户端,
		//另外一个是通信套接字connection,用来和连接的客户端进行数据通信
		public void runServer()
		{
		   //分为五步:等待连接,得到数据流,中间处理过程,关闭接口,计数
		   try {		     
		      server = new ServerSocket( 35535, 30 );		
		      while ( true ) {		
		         waitForConnection();
		         getStreams();		         
		         processConnection();		        
		         closeConnection();		
		         ++counter;
		      }
		   } 
		   catch ( EOFException eofException ) {
		      System.out.println( "客户端断开连接" );
		   }
		   catch ( IOException ioException ) {
		      ioException.printStackTrace();
		   }
		}
		private void waitForConnection() throws IOException
		{
		   displayArea.setText( "我是服务器啊啊~~正在~~~~~等待连接……等待连接……等待连接……等待连接……\n" );
		   connection = server.accept();//当接受客户端请求是时得到通信套接字		         
		   displayArea.append( "从"+ connection.getInetAddress().getHostName()+"得到的第" + counter +
		      " 个连接" 
		      );
		}		
		// 得到发送接受数据
		private void getStreams() throws IOException
		{
		   // 得到发送数据
		   output = new ObjectOutputStream( connection.getOutputStream() );
		   output.flush();//清空缓存,物理发送		
		   //得到输入数据
		   input = new ObjectInputStream( connection.getInputStream() );		
		   displayArea.append( "\n已经得到IO流啦~~~~~~\n" );
		}
		
		// 中间处理操作
		private void processConnection() throws IOException
		{  //发送ack确认 		
		   String message = "服务端("+new 	java.util.Date()+"):";
		   output.writeObject( message );
		   output.flush();
		   enterField.setEnabled( true );//使输入框可用
		//处理客户端发来的数据(如果客户端不发送断开连接的请求,始终处理发来的信息)握手协议&延迟断开
		   do {
		      try {
		         message = ( String ) input.readObject();		         
		         displayArea.append( "\n" + message );
		         displayArea.setCaretPosition( displayArea.getText().length() );
		      }
		      catch ( ClassNotFoundException classNotFoundException ) {
		         displayArea.append( "\n发现不可知信息" );
		      }		
		   } while ( !message.contains("断开连接")&&!message.contains("end") );
		}
		//关闭流和套接字
		private void closeConnection() throws IOException 
		{
		   displayArea.append( "\n用户断开连接" );
		   enterField.setEnabled( false );		   
			output.close();
			input.close();
			connection.close();	   		   
		}	
		// 向客户端发送数据
		private void sendData( String message )
		{	  
		   try {
		      output.writeObject(  "服务端("+new 	java.util.Date()+"):\n" + message );
		      output.flush();
		      displayArea.append(  "\n服务端("+new 	java.util.Date()+"):\n" + message );
		   }
		   catch ( IOException ioException ) {
		      displayArea.append( "\n抱歉!写数据出现IO问题。" );
		   }
		}
		
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -