java.net 操练

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

/*


 * 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();
  
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值