e11_1s.java

来自「java 初学者学习实例」· Java 代码 · 共 103 行

JAVA
103
字号
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class E11_1s//Java Application主类
{
   public static void main(String[] args)
  {
   ServerService MyServer=new ServerService(8000);		          //建立监听服务
  }
}
class ServiceThread extends Frame implements Runnable
 {//当Client有请求时,Server创建一个Frame用于与之交互数据
   ServerService FatherListener; //创建当前通信线程的						监听器对象
   Socket ConnectedClient;          //负责当前线程中C/S					          通信的Socket对象
   Thread ConnectThread;          //负责通信的线程
   Panel ListenerPanel;       //本次通信Server端的信息					显示窗口
   TextArea ServerMeg;     //信息显示窗口的文本区域
	public ServiceThread (ServerService sv, Socket s )                       	           			          //构造函数
	{
	  FatherListener = sv;
	  ConnectedClient = s;
	   ConnectThread = new Thread(this);
	   setTitle("Answer Client");    //建立并显示					  Server端信息显示窗口
	  setLayout(new BorderLayout( ));
	  ServerMeg = new TextArea(10,50);
	  add("Center",ServerMeg);
	  setResizable(false); 	//不可改变窗口大小
      pack( );
	   show( );
			      //获得请求服务的Client端计算机的IP地址
	InetAddress ClientAddress = 	ConnectedClient.getInetAddress( );
	 ServerMeg.appendText( "Client connected"+" from \n"+
	  ClientAddress.toString( )+" .\n");
	 }
	 public void run( )       //子线程任务:与Client端通信
	  {
	  try{
	 DataInputStream in = new DataInputStream (
						//获得从Client读入数据流
	 new BufferedInputStream(ConnectedClient.getInputStream( )));
    PrintStream out = new PrintStream (
					       //获得向Client输出的数据流
	 new BufferedOutputStream( ConnectedClient.getOutputStream( )));
	 out.println("Hello!Wellcome connect to our 	server!\r");
	 out.flush( );            //向Client端输出信息
	  String s = in.readLine( ); //从Client端读入信息
	  while (!s.equals("Bye"))        //直至Client端表示要断开连接
	  {   
	    ServerMeg.appendText("Client端输入的信息为:\n"+ s);
	    s = in.readLine( );        //读入Client端写入的						下一行信息 
     }
	    ConnectedClient.close( );  //若Client端写入					      "Bye"则结束通信
	 }                                      //try
	 catch(Exception e){}
	 FatherListener.addMeg( "Client " + " closed." 	+ "\n" );
	 dispose( );                     //关闭当前通信Frame
	 }                                       //run( )
 }
	  class ServerService extends Frame  //服务器端的监听器						   窗口
	 {
	    ServerSocket m_sListener;       //监听器
        TextArea ListenerMeg;         //显示信息的监听器窗口
	    public ServerService(int Port)
	    {
	  try{
	     m_sListener= new ServerSocket(Port);//,Count);//建							   立监听服务
	     setTitle("Server Listener");//建立监听服务的 							     窗口并显示
	    this.addWindowListener(new WinAdpt( ));
	    setLayout(new BorderLayout( ));
	     ListenerMeg = new TextArea("监听服务已经启	动\n",10,50);
	    add("Center",ListenerMeg);
	    setResizable(false);
	    pack( );
        show( );
	    while(true)
	   {
	     Socket Connected = m_sListener.accept( );
						//接受来自Client端的请求
	    InetAddress ClientAddress = 	Connected.getInetAddress( );
	     ListenerMeg.appendText( "Client " + " 	connected" +   " from \n"+ ClientAddress.toString( ) 	+ " .\n" );
	  //获得请求Client的IP并建立新线程新窗口与此Client通信
	     ServiceThread MyST = new 	ServiceThread(this,Connected);   
	     MyST.ConnectThread.start( ); //启动新线程
	   }
      }
	 catch(IOException e){}
	 }
	 public void addMeg(String s)
					//在监听器窗口中加入信息
	  {
	 ListenerMeg.appendText(s);
	 }
	 }   //ServerSerive Class
	  class WinAdpt extends WindowAdapter
	 {
	 public void windowClosing(WindowEvent e)
	 {
	  ((Frame)e.getWindow( )).dispose( ); 
      System.exit(0);
  }
 }

⌨️ 快捷键说明

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