java.net 操练

类别:Java 点击:0 评论:0 推荐:

一个很简单的局域网聊天工具的服务器端

/*


 * Created on 2005-3-18
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package netChat;

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


/**
 * @author AppleTian
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class server extends JFrame {
 private JTextField messageBox;
 private JTextArea  infBox;
 private ObjectInputStream input;
 private ObjectOutputStream output;
 private ServerSocket server;
 private Socket       serverSocket;
 
 public server(){
  super("server");
  Container c=getContentPane();
  
  messageBox=new JTextField("");
  messageBox.setEnabled(false);
  
  messageBox.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    sendData(e.getActionCommand());
   }
  
  });
  c.add(messageBox,BorderLayout.NORTH);
  
  infBox=new JTextArea();
  infBox.setFont(new Font("Serif",Font.BOLD,12));
  c.add(new JScrollPane(infBox),BorderLayout.CENTER);
  
  setSize(500,400);
  setVisible(true);
  
 }
 

 /**
  * @param actionCommand
  */
 protected void sendData(String actionCommand) {
  try{
   output.writeObject(actionCommand);
   output.flush();
   infBox.append("\nsend<<"+actionCommand+">> to client...\n");
  }
  catch(IOException e){
   infBox.append("\nExceptionIOInSendDataFunction...");
  }
 }
    public void runServer(){
     try{
      server=new ServerSocket(5000,100);
      while(true){
       waitForConnection();
       getStreams();
       processConnection();
       closeConnection();
      }
     }
      catch(EOFException e){
       infBox.append("\nError in runServerFuction");
      }
      catch(IOException e){
       e.printStackTrace();
      }
     
    }

 /**
  *
  */
 private void closeConnection() throws IOException {
  infBox.append("\nclose connection...");
  messageBox.setEnabled(false);
  output.close();
  input.close();
  serverSocket.close();
  
 }


 /**
  *
  */
 private void processConnection() throws IOException {
  String mg="\nconnection succeful";
  messageBox.setEnabled(true);
  output.writeObject(mg);
  output.flush();
  
  do{
   try{
    mg=( String )input.readObject();
    infBox.append("\nsend to client: "+mg);
    infBox.setCaretPosition(infBox.getText().length());
   }
   catch(ClassNotFoundException e){
    infBox.append("\n Unkown class received...");
    
   }
  }while(mg!="end");
  
  
  
  
 }


 /**
  *
  */
 private void getStreams() throws IOException {
  output=new ObjectOutputStream(serverSocket.getOutputStream());
  output.flush();
  
  input=new ObjectInputStream(serverSocket.getInputStream());
  
  infBox.append("\nGet Streams...");
  
  
 }


 /**
  *
  */
 private void waitForConnection() throws IOException {
  infBox.append("wait for a Client...");
  serverSocket=server.accept();
  infBox.append("connected by"+serverSocket.getInetAddress().getHostName());
  
  
 }


 public static void main(String[] args) {
  server my=new server();
  my.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  my.runServer();
 }
}

客户端

/*
 * Created on 2005-3-18
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package netChat;
import javax.swing.*;

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

/**
 * @author AppleTian
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class client extends JFrame {
 
 private JTextField messageBox;
 private JTextArea  infBox;
 private ObjectInputStream input;
 private ObjectOutputStream output;
 private String mg="";
 private String chatServer;
 private Socket   client;
 public client(String host){
  super("client....");
  chatServer=host;
  Container c=getContentPane();
  
  messageBox=new JTextField();
  messageBox.setEnabled(false);
  messageBox.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    sendData(e.getActionCommand());
   }

   
  });
  c.add(messageBox,BorderLayout.NORTH);
  infBox=new JTextArea();
  c.add(infBox,BorderLayout.CENTER);
  
  setSize(500,400);
  setVisible(true);
  
  
  
  
  
 }
 

 /**
  * @param actionCommand
  */
 protected void sendData(String actionCommand) {
  try{
   mg=messageBox.getText();
   output.writeObject(mg);
   output.flush();
   infBox.append("\nsend to server: "+mg);
  }catch(IOException e){
   infBox.append("\nIOException in sendData..");
  }
  
 }
   public void runClient(){
    try{
 
      connectToServer();
      getStreams();
      processConnection();
      closeConnection();
      }catch(IOException e){
       infBox.append(e.toString());
      }
      
   }

 /**
 *
 */
private void closeConnection()throws IOException  {
 // TODO Auto-generated method stub
 infBox.append("\nclose...");
 output.close();
 input.close();
 client.close();

}


 /**
 *
 */
private void processConnection() throws IOException{
 // TODO Auto-generated method stub
 messageBox.setEnabled(true );
 do{
  try{
   mg=(String )input.readObject();
   infBox.append("\nFrom server: "+mg);
   infBox.setCaretPosition(infBox.getText().length());
  }catch(ClassNotFoundException e){
   infBox.append("classNotFound...\n");
  }
 }while(mg!="end");
}


 /**
 *
 */
private void getStreams() throws IOException {
 // TODO Auto-generated method stub
 output=new ObjectOutputStream(client.getOutputStream());
 output.flush();
 input=new ObjectInputStream(client.getInputStream());
 infBox.append("get the IO Stream..\n");
 
}


 /**
 *
 */
private void connectToServer() throws IOException {
 // TODO Auto-generated method stub
 infBox.append("try connecting to server...\n");
 client=new Socket(InetAddress.getByName(chatServer),5000);
 infBox.append("connect to server:"+client.getInetAddress().getHostName()+"\n");
 
}


 public static void main(String[] args) {
  client p;
  if(args.length==0)
   p=new client("127.0.0.1");
  else
   p=new client(args[0]);
  p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  p.runClient();
  
 }
}

本文地址:http://com.8s8s.com/it/it10813.htm