chater.java

来自「简单清晰具有启发性的实例。 Net1和Client1类实现了TCP的简单应用。」· Java 代码 · 共 497 行 · 第 1/2 页

JAVA
497
字号
			  Chater.setMessage("connection failed\n"
			                     +"your friend may be not in line\n"
			                     +"check your connection to the internet\n");
			  setVisible(false);
			}
	}
	}
} 
class Connecting extends Thread{
  Socket s;
  private Chater mainFrame;
  int t1;
  Connecting(Socket soc, Chater parent){
  		s = soc;
  		t1 = 4;
  		mainFrame = parent;
  		start();
  	}
  public void run(){
  			String str = "";
	 	    byte[] buff = new byte[64];
		     try{
		       DatagramSocket ds = new DatagramSocket(s.getLocalPort());
				   DatagramPacket dp = new DatagramPacket(buff,buff.length);
					 ds.receive(dp);//会阻塞;
					 str = new String(dp.getData(),dp.getOffset(),dp.getLength());
					 System.out.println("received:"+str);
					 mainFrame.appendMessage("\nFrom Server "+dp.getAddress()+":\n"+str);
				 }catch(Exception e){
				 	  System.out.println("connection failed");
			  		mainFrame.setTheState(Chater.DISCONNECTED);
			  		mainFrame.setMessage("connection failed\n"
			                     +"your friend may be not in line\n"
			                     +"check your connection to the internet\n");
					}
	    if(str.equals("#OK")){	
				  System.out.println("connection affirmed:");
				  System.out.println("socket = "+s);	  
				  Chater.remoteAddr = s.getInetAddress();  
				  Chater.remotePort = s.getPort();
				  
			  	Chater.setTheState(Chater.CONNECTED);
			  	Chater.setMessage("You have connected to your frend.\naddress:"+s.getInetAddress());
			  	new Receiver(s,mainFrame);
			  	try{
	//		  	s.close();
			    }catch(Exception ex){
			    	  ex.printStackTrace();
			    	}
			  	Chater.tf.setEditable(true);
			  	mainFrame.m_command.add(mainFrame.command_disconnect);
			  	mainFrame.m_File.add(mainFrame.file_send);
			  	mainFrame.file_send.addActionListener(new File_send(mainFrame,s));
			  	mainFrame.command_connect.setEnabled(false);
			  }
		 else
		 {
			 		System.out.println("connection failed");
			    Chater.setTheState(Chater.DISCONNECTED);
			    Chater.setMessage("connection dinied\n");
		 }
		}
class File_send implements ActionListener
{	 
	 private Chater mainFrame;
	 private Socket sock;
	 File_send(Chater mainF,Socket s)
	 {
	 			mainFrame = mainF;
	 			sock = s;
	 }
	 public void actionPerformed(ActionEvent e)
	 {
					String load_File;
					FileDialog fd = new FileDialog(mainFrame, "Chose a file to send",FileDialog.LOAD);
					fd.setVisible(true);		
					load_File = fd.getFile();
				  mainFrame.send("#FILE#"+load_File);
					String res = "";
	 	    	byte[] buff = new byte[64];
		    	try
		    	{
		      		mainFrame.appendMessage("\nWaiting for the response...");
		      		DatagramSocket ds = new DatagramSocket(sock.getLocalPort());
				  		DatagramPacket dp = new DatagramPacket(buff,buff.length);
							ds.receive(dp);//会阻塞;
							res = new String(dp.getData(),dp.getOffset(),dp.getLength());
							System.out.println("received:"+res);
							mainFrame.appendMessage("\nFrom Remote "+dp.getAddress()+":\n"+res);
				  }
				  catch(Exception ee)
				  {
				 	  System.out.println(" failed");
			  		ee.printStackTrace();
					}
					if(res.equals("#OK"))
					{
							try
							{
				 					BufferedReader in = new BufferedReader(
																					new FileReader(load_File));
				 					BufferedWriter out =new BufferedWriter(
																					new OutputStreamWriter(sock.getOutputStream()));
									int ch;
									while((ch = in.read()) != -1)
											out.write(ch);								
						  }
						  catch(IOException ex)
						  {
									String err = ex.toString();
									System.out.println(err);
						  }	
		      		mainFrame.appendMessage("\nThe file "+load_File+
		      		                        " has been succesfully sended.");						  
				  }
				  else
				  		mainFrame.appendMessage("\nFile Sending is denied.");
	 }
	
}
}
class Receiver extends Thread{
	Socket sock; 
	Chater mainFrame;
	Receiver(Socket s, Chater parent){		
		  sock = s;	
		  mainFrame = parent;											
			start();
		}
	 public void run(){
	 	     String str;
	 	     byte[] buff = new byte[64];
		     try
		     {
		       DatagramSocket ds = new DatagramSocket(sock.getLocalPort());
				   DatagramPacket dp = new DatagramPacket(buff,buff.length);
				   while((Chater.getTheState() == Chater.CONNECTED) 
				           || (Chater.getTheState() == Chater.CONNECTING)){
					 ds.receive(dp);//会阻塞;
					 str = new String(dp.getData(),dp.getOffset(),dp.getLength());
					 System.out.println("received:"+str);
					 mainFrame.appendMessage("\nFrom "+dp.getAddress()+":\n"+str);
					 if(str.equals("#DISCONNECT"))
					 {
					    mainFrame.setTheState(Chater.DISCONNECTED);
					    System.out.println("Your friend has left.\n");
					    mainFrame.setMessage("Your friend has left.\n");
					    mainFrame.tf.setEditable(false);
			  	    mainFrame.m_command.remove(mainFrame.command_disconnect);
			  	    mainFrame.m_File.remove(mainFrame.file_send);
			  	    mainFrame.command_connect.setEnabled(true);
					 }
					if(str.substring(0,6).equals("#FILE#") && Chater.getTheState() == Chater.CONNECTED)
					 {
					 			str = str.substring(6);
					 			mainFrame.appendMessage("\n"+str);
					 			int answer = JOptionPane.showConfirmDialog(null, 
																						"\nYour friend wants to send you a file"
																						+"\nFile name: "
																		   		  + str
																		   		  + "\nDo you agree?", 
																		   		  "accept file", 
																		   		  JOptionPane.YES_NO_OPTION, 
																		   		  JOptionPane.QUESTION_MESSAGE);
							  if(answer == JOptionPane.YES_OPTION)
							  {
							  		try
											{
								 					BufferedReader in = new BufferedReader(
																									new InputStreamReader(sock.getInputStream()));
								 					BufferedWriter out =new BufferedWriter(
																									new FileWriter(str));
													mainFrame.send("#OK");
													int ch;
													while((ch = in.read()) != -1)
															out.write(ch);	
													mainFrame.appendMessage("\nThe file "+str+" has been succesfully recieved.");							
										  }
										  catch(IOException ex)
										  {
													String err = ex.toString();
													System.out.println(err);
										  }			
							  }
							  else
					  		{
					 					mainFrame.appendMessage("\n You have cancled the file sending.");
					 					mainFrame.send("#NO");
					 			}
				   }
				  }
				 }
				 catch(Exception e)
				 {
								e.printStackTrace();
				 }
		}
}


class Server1 extends Thread{
	    private ServerSocket sock;
	    private Chater mainFrame;
	Server1(ServerSocket s,Chater f){
		  System.out.println("Start:\n"+s);
			sock = s;			
			mainFrame = f;											
			start();
		}
	 public void run(){
	 	
		try{
				Socket s = sock.accept();
				int answer = JOptionPane.showConfirmDialog(null, 
				"Your friend from:\n"
   		  + s.getInetAddress()
   		  + "Do you agree?", 
   		  "accept connection", 
   		  JOptionPane.YES_NO_OPTION, 
   		  JOptionPane.QUESTION_MESSAGE);
       if(answer == JOptionPane.YES_OPTION){
				Chater.remoteAddr = s.getInetAddress();  
				Chater.remotePort = s.getPort();
				mainFrame.send("#OK");
				System.out.println("Connection accepted:\n"+s);
				System.out.println("Listening finished");
				Chater.setTheState(Chater.CONNECTED);
				mainFrame.m_command.add(mainFrame.command_disconnect);
			  mainFrame.m_File.add(mainFrame.file_send);
			  mainFrame.command_connect.setEnabled(false);
				new Receiver(s,mainFrame);
//				s.close();
				Chater.appendMessage("Connection accepted:\n"+s);
				Chater.tf.setEditable(true);
			 }
      else{
        Chater.remoteAddr = s.getInetAddress();  
				Chater.remotePort = s.getPort();
        mainFrame.send("#NO");
      	Chater.appendMessage("Connection denied:\n"+s);
      } 
		}catch(IOException e){
		 			e.printStackTrace();
		 		}
		 }
}

⌨️ 快捷键说明

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