example9_4.java

来自「书中的例题」· Java 代码 · 共 146 行

JAVA
146
字号
/* 客户机端程序  */
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
class C_client extends Frame implements ActionListener
{
    TextArea    txt1;
	Button      btn;
    Panel       p;
	int         port;
	DataInputStream  in=null;   //数据输入流
	DataOutputStream out=null;  //数据输出流
	Socket           c_socket;  //套接字
	InputStream      in_data;   //接收到的输入流         
    OutputStream     out_data;  //发送的输出流
	String           str;       //存放接收的数据
    int              i=0;

  C_client()
	 {
	  super("客户端");
	  setSize(300,200);
	  setVisible(true);
	  txt1=new TextArea(5,4);
	  add(txt1,BorderLayout.CENTER);
	  p=new Panel();
	  add(p,BorderLayout.NORTH);
	  btn=new Button("连接");
	  p.add(btn);
      btn.addActionListener(this);
	  validate();
     }

  public static void main(String[] args)
	{   new C_client();  } 

  public void actionPerformed(ActionEvent eee)
	{ 
   	try{
         c_socket=new Socket("192.168.1.1",4321);
		}catch(IOException e){ System.out.println("找不到服务器"); } 
	try{
		 in_data=c_socket.getInputStream();
         out_data=c_socket.getOutputStream();
	     in=new DataInputStream(in_data);
         out=new DataOutputStream(out_data);
         //获取到对方及本机的端口号 
         int p1= c_socket.getPort() ;
		 int p2= c_socket.getLocalPort() ;
 		 txt1.append("获取到对方的端口号: "+p1+"\n");
         txt1.append("本机的端口号: "+p2+"\n");
	    }catch(IOException e){ System.out.println("建立输入输出流出错"); } 
    try{
     	 str=in.readUTF();
         txt1.append("客户收到:"+str+"\n");
		 if (i>10) { 
			 out.writeUTF("end");
			 in.close();
			 out.close();
             c_socket.close();
			 System.exit(0);
			 }//发出end信息
		 else 
			 { out.writeUTF("I am Client");
		       i++;
		     }
       }catch(IOException e){ System.out.println("线路读写出错");  }  
  }
}

/* 服务器端程序 */
import java.net.*;import java.io.*;
import java.awt.*;import java.awt.event.*;
class S_server extends Frame implements ActionListener,Runnable
{
	ServerSocket     s_socket;  //服务器端套接字
	Socket           c_socket;  //套接字
 	DataInputStream  in=null;   //数据输入流
	DataOutputStream out=null;  //数据输出流
	InputStream      in_data;   //接收到的输入流         
    OutputStream     out_data;  //发送的输出流
	int         i=0;            //计数(连接的客户数)
	String      str;
	TextArea    txt1;
	Button      btn;
	Panel       p;
 S_server()
   {
	  super("server");
   	  setSize(300,200);	  
	  setVisible(true);
	  txt1=new TextArea(5,4);  
	  add(txt1,BorderLayout.CENTER);
	  p=new Panel();	      
	  add(p,BorderLayout.NORTH);
	  btn=new Button("开始监听端口");
	  p.add(btn);	  
	  validate();
      btn.addActionListener(this);
	}
  public void actionPerformed(ActionEvent eee)
	{
	  try{
		  s_socket=new ServerSocket(4321);
		  while(true)
			{
   	        c_socket=s_socket.accept();
	         Thread t=new Thread(this);
			 t.start();
             i++;
            } 
		 }catch(IOException e){  }   
    }
    //线程
   public void run()
	{
      try { 
		 while(true)
		  {
	       in_data=c_socket.getInputStream();
           out_data=c_socket.getOutputStream();
	       in=new DataInputStream(in_data);
           out=new DataOutputStream(out_data);
		   out.writeUTF("Hello,我是服务器");
           str=in.readUTF();
           if (str.equals("end"))
			 {//接收到end信息,则断开连接
              in.close();
			  out.close();
			  c_socket.close();
             }
           txt1.append("第"+i+"个客户发来:"+str+"\n");
		   Thread.sleep(200);
		  } //while_end
	   }
	   catch(IOException e){  }   
	   catch(Exception ee){ }  //Thread_catch
    }
 public static void main(String[] args) 
  {
    new  S_server();
  }
}

⌨️ 快捷键说明

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