java socket 编程

来源:互联网 发布:vb中mid函数的使用方法 编辑:程序博客网 时间:2024/06/17 17:17

package com.socket;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.logging.Logger;

public class Client {

 private Logger logger = Logger.getLogger(Client.class.getName());
 private final static int filePath_num = 0;

 private final static int host_num = 1;

 private final static int port_num = 2;

 public static void main(String[] args) {
  Client client=new Client();
  int serPort = 2012;// 默认连接端口2012;
  String serIP = "127.0.0.1";// 服务器IP
  try {
   if (args.length < 1) {
    client.logger.warning("未传值!!");
//    System.err.println("未传值!!");
    System.exit(0);
   } else {
    File file=new File(args[filePath_num]);
    if(!file.exists())
    {
     client.logger.warning("文件不存在!!");
//     System.err.println("文件不存在!!");
     System.exit(0);
    }
    if (args.length == port_num && args[host_num].length() > 0) {
     serIP = args[host_num];
    }
    if (args.length > port_num && args[port_num].length() > 0) {
     serPort = Integer.parseInt(args[port_num]);
    }
    client.fileSend(args[filePath_num], serIP, serPort);
   }
  } catch (Exception e) {
   e.printStackTrace();
//   System.err.println(e.getMessage());
  }
 }

 private void fileSend(String filePath, String serIP, int serPort) {
    Socket socket = null;
    OutputStream out = null;
    try {
     socket = new Socket(serIP,serPort);
     out = socket.getOutputStream();
     File fileToSend=new File(filePath);
     byte[] file = new byte[256];  
     byte[] tfile = fileToSend.getName().getBytes();  
     for(int i=0;i<tfile.length;i++)
     {
      file[i] = tfile[i];  
     }  
         file[tfile.length] = -0;  
        
         out.write(file,0,file.length);
                
          //大小     
         byte[] size = new byte[64];  
         byte[] tsize = (""+fileToSend.length()).getBytes();  
           
         for(int i=0;i<tsize.length;i++)
         {
             size[i] = tsize[i];  
         }  
           
         size[tsize.length] = -0;  
        
         out.write(size,0,size.length);
       
            
           
         FileInputStream fis = null;  
         byte[] buf = new byte[1024*10];   
        
             fis = new FileInputStream(fileToSend);
        
         
         int readsize = 0;   
         
             while((readsize = fis.read(buf, 0, buf.length))>0)
             {  
                 out.write(buf,0,readsize);  
                 out.flush(); 
             }
         }
         catch (Exception e)
         {
             e.printStackTrace();
         }  

         
 }
}

 

server

 

 

package com.socket;

import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

 

public class Server {
 
 //服务器默认端口2012
 private int serPort = 2012;
 
 //服务器默认文件夹,用于存放接收文件
 private String tempFolder = System.getProperty("user.dir")+File.separator+"ReceiveFile";
 
 private final static int port_num=0;
 
 private final static int tempFolder_num=1;
// //线程池
//  private ExecutorService executorService;
  //单个CPU线程池大小
//  private final int POOL_SIZE=10;
 
 public static void main(String[] args) {
  Server server=new Server();
  try {
//     System.out.println("user.dir="+System.getProperty("user.dir"));
     ServerSocket serverSocket = null;//设定Socket
     if (args.length<1 || null==args) {
      serverSocket = new ServerSocket(server.serPort);
     }else {
       server.serPort=server.getPort(args[port_num]);
       serverSocket = new ServerSocket(server.serPort);
//     Runtime的availableProcessor()方法返回当前系统的CPU数目.
//       server.executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*server.POOL_SIZE);
       server.tempFolder=server.getWorkFolder(args);
     }
     System.out.println("Welcome to TransferServer");
     System.out.println("服务器启动,监听端口" + serverSocket.getLocalPort());
     System.out.println("服务器临时文件路径: "+server.tempFolder);
     while (true) {
       Socket socket = serverSocket.accept();
       ServerThread serverThread=new ServerThread(socket,server.tempFolder);
//       server.executorService.execute(serverThread);
       Thread thread=new Thread(serverThread);
       thread.start();
     }
   } catch (IOException e) {
      e.printStackTrace();
      System.out.println("服务器端口被占用,或其他问题.");
   }
 }
 
 private int getPort(String s){
  int port=serPort;
  //  检测输入端口是否正确
     if (s.replaceAll("//D", "")!="") {
      this.serPort = Integer.parseInt(s);
     }else {
      System.out.println("输入的端口有错误,使用系统默认端口");
     }
  return port;
 }
 
 private String getWorkFolder(String[] args){
  String  wordFolder=this.tempFolder;
  if (args[tempFolder_num].length()>0) {
   wordFolder = args[tempFolder_num];
  }
  return wordFolder;
 }
}

 

server线程 

 

package com.socket;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ServerThread implements Runnable{
  private Socket socket;// 实例化socket类
  private String tempFolder;//文件存放路径
  private java.io.InputStream in = null;//从客户端读数据的
  FileOutputStream fos =null;
  public ServerThread(Socket so,String tempFolder) {
    this.socket = so;
    this.tempFolder = tempFolder;
    try {
     this.in = this.socket.getInputStream();
    } catch (IOException e) {
     e.printStackTrace();
    }
 }
 public void run() {
  String info  = "";
        try
        {     
            while(true)  
            {  
                //第一个参数为命令  
                long befor = System.currentTimeMillis();
               
    
//                byte cmd[] = new byte[128];  
                int b = 0;  
                int ends = 0;  
              
                    byte[] filename = new byte[256];  
                    b = 0;  
                    while(b<filename.length)
                    {
                        b += in.read(filename, b, filename.length-b);  
                    }  
                    ends = 0;  
                    for(int i=0;i<filename.length;i++)
                    {
                        if(filename[i]==-0)
                        {  
                            ends = i;  
                            break;  
                        }  
                    }  
                    String filenames = new String(filename,0,ends);
                    filenames = this.tempFolder+File.separator+System.currentTimeMillis()+filenames;
                    System.out.println("filenames=="+filenames);
                    File fileout = new File(filenames);  

                   
                    fos = new FileOutputStream(fileout);  
                      
                    byte[] filesize = new byte[64];  
                    b = 0;  
                    while(b<filesize.length)
                    {
                        b += in.read(filesize, b, filesize.length-b);  
                    }  
                      
                    ends = 0;  
                    for(int i=0;i<filesize.length;i++)
                    {
                        if(filesize[i]==-0)
                        {  
                            ends = i;  
                            break;  
                        }  
                    }  
                    String filesizes = new String(filesize,0,ends);  
                      
                    System.out.println("filesize:"+filesizes);  
                    int ta = Integer.parseInt(filesizes);  
                    byte[] buf = new byte[1024*10];  
 
                    while(true)
                    {  
                        if(ta==0)
                        {  
                            break;  
                        }  
                        int len = ta;  
                        if(len>buf.length)
                        {  
                            len = buf.length;  
                        }  
                        int rlen = in.read(buf, 0, len);  

                        ta -= rlen;  
                        if(rlen>0)
                        {  
                            fos.write(buf,0,rlen);  
                            fos.flush();  
                        }  
                        else
                        {  
                            break;  
                        }  
                    }  
                    long diff =System.currentTimeMillis() - befor;
                    diff /=1000;

                   info = "传输完成!文件已经保存到:"+filenames+",文件大小:"+filesizes+"字节,"+"共用时间:"+diff+"秒";
//                   int result = javax.swing.JOptionPane.showConfirmDialog(null, info, "文件传输",  javax.swing.JOptionPane.YES_NO_OPTION, javax.swing.JOptionPane.INFORMATION_MESSAGE);
                   System.out.println(info);
                   fos.close();
                   break;  
            }  
            //socket.close();  
            }
        catch(Exception e)
        {
            e.printStackTrace();  
        }finally{
         try
         { if(fos!=null){
           fos.close();
          }
          if(in!=null){
           in.close();
          }
          if(socket!=null){
           this.socket.close();
          }
         }
         catch (IOException ex1)
         {
         }
         
        }  
 }

}

 

其他

 

package com.socket;

import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class UtilLog  {

   public static void main(String[] args) throws IOException {
          Logger log = Logger.getLogger("lavasoft");
          log.setLevel(Level.INFO);
          Logger log1 = Logger.getLogger("lavasoft");
          System.out.println(log==log1);     //true
          Logger log2 = Logger.getLogger("lavasoft.blog");
//          log2.setLevel(Level.WARNING);

          ConsoleHandler consoleHandler =new ConsoleHandler();
          consoleHandler.setLevel(Level.ALL);
          log.addHandler(consoleHandler);
          FileHandler fileHandler = new FileHandler("C:/testlog%g.log");
          fileHandler.setLevel(Level.INFO);
          log.addHandler(fileHandler);
          log.info("aaa");
          log2.info("bbb");
          log2.fine("fine");
  }


}

 

 

原创粉丝点击