OnlyTheStrongSurvive

Socket 编程

上一篇 / 下一篇  2011-09-13 12:03:43 / 个人分类:娱乐

import java.io.*;
import java.net.*;

public class MySend
{
    static void sendFile(ObjectOutputStream oos, String filename) throws Exception
    {
        FileInputStream fis = new FileInputStream(filename);
        
        byte[] buf = new byte[1024]; // 创建缓冲区
       
        oos.writeObject(filename);   // 首先把文件名发给对方
        oos.flush();
       
        // 打算每次读1024个,最后一次可能不足
        while(true){
            int n = fis.read(buf);   // n 表示实际上读入了多少
            if(n>0){
                oos.writeInt(n);     // 告诉对方本次传送的数据量
                oos.write(buf,0,n);  // 发送实际的数据
                oos.flush();
               
            }
            if(n<1024){  // 表示已经没有更多的数据要读,就是已经到了文件尾
                oos.writeInt(-1);  // 告诉对方本文件的数据发送完毕
                oos.flush();
                break;
            }
        }
       
        fis.close();
    }
   
    public static void main(String[] args) throws Exception
    {
        System.out.println("link to server ....");
       
        Socket skt = new Socket("127.0.0.1", 6789);
       
        System.out.println("连接成功....开始发送文件");
       
        ObjectOutputStream os = new ObjectOutputStream(skt.getOutputStream());   
       
        // 测试发送两个文件,第二个文件较大
        sendFile(oos, "a.txt");
        sendFile(oos, "cat.bmp");
       
        oos.writeObject("end");  // 告诉对方,所有文件都发送完了
        oos.flush();
       
        System.out.println("发送完毕");
    }
}
----------------------------------------------------------------

import java.io.*;
import java.net.*;

public class MyRecv
{
    // 处理一个文件的接收
    static void recvOneFile(ObjectInputStream ois, FileOutputStream fos) throws Exception
    {
        byte[] buf = new byte[1024];
        while(true){
            int num = ois.readInt(); // 得到下一个数据块的字节数
            if(num<0) break;
           
            ois.readFully(buf,0,num); // 不要使用read(),因为它不能保证正好读num个
            fos.write(buf,0,num);
        }
    }
   
    // 接收多个文件
    static void recvFiles(ObjectInputStream ois) throws Exception
    {
        while(true){
            String filename = (String)ois.readObject();
            if(filename.equals("end")) break;  // 如果一个文件的文件名为end就结束
           
            FileOutputStream fos = new FileOutputStream("c:\\" + filename);
           
            recvOneFile(ois, fos);
           
            fos.close();
        }
    }
   
    public static void main(String[] args) throws Exception
    {
        System.out.println("server at 6789, listen....");
        ServerSocket sskt = new ServerSocket(6789);
        Socket skt = sskt.accept();
       
        System.out.println("联接成功.... 正在接收文件");
       
        ObjectInputStream is = new ObjectInputStream(skt.getInputStream());
       
        recvFiles(ois);
       
        System.out.println("接收完毕");
    }
}

TAG:

 

评分:0

我来说两句

Open Toolbar