java socket传送文件

java socket传送文件,第1张

客户端代码如下:

import java.io.DataOutputStream  

import java.io.File  

import java.io.FileInputStream  

import java.io.IOException  

import java.net.InetSocketAddress  

import java.net.Socket  

  

/** 

 * 文件发送客户端主程序 

 * @author admin_Hzw 

 * 

 */  

public class BxClient {  

      

    /** 

     * 程序main方法 

     * @param args 

     * @throws IOException 

     */  

    public static void main(String[] args) throws IOException {  

        int length = 0  

        double sumL = 0   

        byte[] sendBytes = null  

        Socket socket = null  

        DataOutputStream dos = null  

        FileInputStream fis = null  

        boolean bool = false  

        try {  

            File file = new File("D:/天啊.zip") //要传输的文件路径  

            long l = file.length()   

            socket = new Socket()    

            socket.connect(new InetSocketAddress("127.0.0.1", 48123))  

            dos = new DataOutputStream(socket.getOutputStream())  

            fis = new FileInputStream(file)        

            sendBytes = new byte[1024]    

            while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {  

                sumL += length    

                System.out.println("已传输:"+((sumL/l)*100)+"%")  

                dos.write(sendBytes, 0, length)  

                dos.flush()  

            }   

            //虽然数据类型不同,但JAVA会自动转换成相同数据类型后在做比较  

            if(sumL==l){  

                bool = true  

            }  

        }catch (Exception e) {  

            System.out.println("客户端文件传输异常")  

            bool = false  

            e.printStackTrace()    

        } finally{    

            if (dos != null)  

                dos.close()  

            if (fis != null)  

                fis.close()     

            if (socket != null)  

                socket.close()      

        }  

        System.out.println(bool?"成功":"失败")  

    }  

}

服务端代码如下:

import java.io.DataInputStream  

import java.io.File  

import java.io.FileOutputStream  

import java.io.IOException  

import java.net.ServerSocket  

import java.net.Socket  

import java.util.Random  

import com.boxun.util.GetDate  

  

  

/** 

 * 接收文件服务 

 * @author admin_Hzw 

 * 

 */  

public class BxServerSocket {  

      

    /** 

     * 工程main方法 

     * @param args 

     */  

    public static void main(String[] args) {  

        try {  

            final ServerSocket server = new ServerSocket(48123)  

            Thread th = new Thread(new Runnable() {  

                public void run() {  

                    while (true) {  

                        try {    

                            System.out.println("开始监听...")  

                            /* 

                             * 如果没有访问它会自动等待 

                             */  

                            Socket socket = server.accept()  

                            System.out.println("有链接")  

                            receiveFile(socket)  

                        } catch (Exception e) {  

                            System.out.println("服务器异常")  

                            e.printStackTrace()  

                        }  

                    }  

                }  

            })  

            th.run() //启动线程运行  

        } catch (Exception e) {  

            e.printStackTrace()  

        }       

    }  

  

    public void run() {  

    }  

  

    /** 

     * 接收文件方法 

     * @param socket 

     * @throws IOException 

     */  

    public static void receiveFile(Socket socket) throws IOException {  

        byte[] inputByte = null  

        int length = 0  

        DataInputStream dis = null  

        FileOutputStream fos = null  

        String filePath = "D:/temp/"+GetDate.getDate()+"SJ"+new Random().nextInt(10000)+".zip"  

        try {  

            try {  

                dis = new DataInputStream(socket.getInputStream())  

                File f = new File("D:/temp")  

                if(!f.exists()){  

                    f.mkdir()    

                }  

                /*   

                 * 文件存储位置   

                 */  

                fos = new FileOutputStream(new File(filePath))      

                inputByte = new byte[1024]     

                System.out.println("开始接收数据...")    

                while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {  

                    fos.write(inputByte, 0, length)  

                    fos.flush()      

                }  

                System.out.println("完成接收:"+filePath)  

            } finally {  

                if (fos != null)  

                    fos.close()  

                if (dis != null)  

                    dis.close()  

                if (socket != null)  

                    socket.close()   

            }  

        } catch (Exception e) {  

            e.printStackTrace()  

        }  

    }  

}

1.程序功能

程序FLDCRY可根据用户提供的火成岩中共存的两种长石的总成分(xAn,XAb,xor),按照物质平衡原理和Fuhrman和Lindsley等(1988)的三元长石的活度/成分模型,计算在平衡结晶作用条件下,共存的两种长石的成分、含量和平衡温度。由此,可改进Rittmann(1973)在火山岩稳定矿物组合计算中采用长石的诺模图来确定共存的两种长石的成分和含量的方法。计算结果可用于对火成岩的定量化学分类和岩石成因解释(马鸿文等,1997)。

2.方法原理

本程序设计原理为,首先根据用户提供的火成岩中共存的两种长石的总成分(XAn,XAb,xor),近似给出两种长石的初始成分;然后,根据物质平衡原理,采用最小二乘法,计算出两种长石的含量。继而根据两种长石的成分,采用Fuhrman和Lindsley(1988)的三元长石活度/成分模型,计算两种长石中各端员组分的活度是否相等。若不相等,则分别采用Fuhrman和Lindsley(1988)、Kroll等(1993)的算法,调整两种长石中各端员组分的含量(xAn,xAb,xor)。整个计算过程采用迭代法,直至计算出的各端员组分活度(aAn,aAb,aor)在两种长石中相等,同时求解出两种长石的含量和平衡温度。

3.程序结构

结晶岩热力学软件

4.使用说明

(1)输入格式

程序运行过程中,按照屏幕提示,依次提供以下参数:

OFN 输出文件名

Sample 样品号

PGPa 估计的压力(GPa)

XAn,XAb,XOr 岩石中共存的两种长石的总成分

程序每次运行可设定不同的压力,对不同的样品进行循环计算。

(2)输出格式

全部计算结果输出到文件OFN中。内容包括:样品号,估计的压力(GPa),以及迭代计算结果,即两种长石的总成分,斜长石和碱性长石的成分和含量,采用Fuhrman和Lindsley(1988)的算法调整的两种长石中各端员组分的含量和平衡温度,采用Kroll等(1993)的算法调整的两种长石中各端员组分的含量和平衡温度等。

每次迭代计算的结果均按相同格式输出。

5.程序文本

结晶岩热力学软件

结晶岩热力学软件

结晶岩热力学软件

do i=1,nm

do j=1,m

A2(i,j)=Al(j,i)

end do

end do**** A2 is transpose of A1,rank(nm,m),multiply Al by A2 **************

do i=1,nm

do j=1,nm

A(i,j)=0

do k=1,m

A(i,j)=A(i,j)+A2(i,k)*A1(k,j)

end do

end do

end do**** A(nm,nm)matrix inversion by the Gauss-Jordan method ***************

D=1.0

do j=1,nm

11(j)=0

end do

do i=1,nm**** search for the p i vot e l ement ***************************************

AB=0

do j=1,nm

if((I1(j)-1).eq.0)goto 75

do k=1,nm

if((I1(k)-1).eq.0)goto 70

if((I1(k)-1).gt.0)goto 86

if((abs(AB)-abs(A(j,k))).gt.0)goto 70

13=j

I2=k

AB=A(j,k)

70  end do

75  end do

I1(I2)=I1(I2)+1**** interchange rows to put the pivot element on the diagonal **********

if((I3-I2).eq.0)goto 80

D=-D

do L=1,nm

Sl=A(I3,L)

结晶岩热力学软件

结晶岩热力学软件

结晶岩热力学软件

结晶岩热力学软件

结晶岩热力学软件

结晶岩热力学软件

结晶岩热力学软件

$ wAnOr,wOrAbAn,TAn,TAb,TOr,SUM,XAnpl,XAbpl,XOrpl,XCnpl,XAnal,

$ XAbal,XOral,XCnal,XAnp,XAbp,XOrp,XCnp,XAna,XAba,XOra,XCna)

data R/8.31441/

CAn=R*(alog(XAnpl*(1+XAnpl+XCnpl)*(1+XAnpl+XCnpl)/4)

$ -alog(XAnal*(1+XAnal+XCnal)*(1+XAnal+XCnal)/4))

$ +wsAbOr*(XOral*XAbal*(0.5-XAnal-2*XOral)

$ -wsAbOr*(XOrpl*XAbpl*(0.5-XAnpl-2*XOrpl))

$ +wsOrAb*(XAbal*XOral*(0.5-XAnal-2*XAbal))

$ -wsOrAb*(XAbpl*XOrpl*(0.5-XAnpl-2*XAbpl))

AA=wOrAb*(XAbal*XOral*(0.5-XAnal-2*XAbal))

$ -wOrAb*(XAbpl*XOrpl*(0.5-XAnpl-2*XAbpl))

$ +wAbOr*(XOral*XAbal*(0.5-XAnal-2*XOral))

$ -wAbOr*(XOrpl*XAbpl*(0.5-XAnpl-2*XOrpl))

$ +wAbAn*(2*XAbal*XAnal*(1-XAnal)+XAbal*XOral*(0.5-XAnal))

$ -wAbAn*(2*XAbpl*XAnpl*(1-XAnpl)+XAbpl*XOrpl*(0.5-XAnpl))

$ +wAnAb*(XAbal*XAbal*(1-2*XAnal)+XAbal*XOral*(0.5-XAnal))

$ -wAnAb*(XAbpl*XAbpl*(1-2*XAnpl)+XAbpl*XOrpl*(0.5-XAnpl))

$ -wOrAn*((2*XOrpl*XAnpl*(1-XAnpl)+XOrpl*XAbpl*(0.5-XAnpl))

$ -(2*XOral*XAnal*(1-XAnal)+XOral*XAbal*(0.5-XAnal)))

$ -wAnOr*(((1-2*XAnpl)*XOrpl**2+XOrpl*XAbpl*(0.5-XAnpl))

$ -((1-2*XAnal)*XOral**2+XOral*XAbal*(0.5-XAnal)))

$ -wOrAbAn*(XOrpl*XAbpl*(1-2*XAnpl)-XOral*XAbal*(1-2*XAnal))

TTAn=AA/CAn-273.15

CAb=R*(alog(XAbpl*(1+XAnpl+XCnpl)*(XAbpl+XOrpl))

$ -alog(XAbal*(1+XAnal+XCnal)*(XAbal+XOral)))

$ +wsAbOr*(XOral**2*(1-2*XAbal)+XOral*XAnal*(0.5-XAbal))

$ -wsAbOr*(XOrpl**2*(1-2*XAbpl)+XOrpl*XAnpl*(0.5-XAbpl))

$ +wsOrAb*(2*XOral*XAbal*(1-XAbal)+XAnal*XOral*(0.5-XAbal))

$ -wsOrAb*(2*XOrpl*XAbpl*(1-XAbpl)+XAnpl*XOrpl*(0.5-XAbpl))

BB=wOrAb*(2*XOral*XAbal*(1-XAbal)+XAnal*XOral*(0.5-XAbal))

$ -wOrAb*(2*XOrpl*XAbpl*(1-XAbpl)+XAnpl*XOrpl*(0.5-XAbpl))

$ +wAbOr*(XOral**2*(1-2*XAbal)+XOral*XAnal*(0.5-XAbal))

$ -wAbOr*(XOrpl**2*(1-2*XAbpl)+XOrpl*XAnpl*(0.5-XAbpl))

$ +wAbAn*(XAnal**2*(1-2*XAbal)+XOral*XAnal*(0.5-XAbal))

$ -wAbAn*(XAnpl**2*(1-2*XAbpl)+XOrpl*XAnpl*(0.5-XAbpl))

$ -wOrAn*(XAnpl*XOrpl*(0.5-XAbpl-2*XAnpl)

$ -XAnal*XOral*(0.5-XAbal-2*XAnal))

$ -wAnOr*(XOrpl*XAnpl*(0.5-XAbpl-2*XOrpl)

$ -XOral*XAnal*(0.5-XAbal-2*XOral))

$ -wOrAbAn*(XAnpl*XOrpl*(1-2*XAbpl)-XOral*XAnal*(1-2*XAbal))

$ +wAnAb*(2*XAbal*XAnal*(1-XAbal)+XOral*XAnal*(0.5-XAbal))

$ -wAnAb*(2*XAbpl*XAnpl*(1-XAbpl)+XOrpl*XAnpl*(0.5-XAbpl))

TTAb=BB/CAb-273.15

COr=R*(alog(XOrpl*(1+XAnpl+XCnpl)*(XAbpl+XOrpl))

$ -alog(XOral*(1+XAnal+XCnal)*(XAbal+XOral)))

$ +wsAbOr*(2*XAbal*XOral*(1-XOral)+XAbal*XAnal*(0.5-XOral))

$ -wsAbOr*(2*XAbpl*XOrpl*(1-XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))

$ +wsOrAb*(XAbal**2*(1-2*XOral)+XAbal*XAnal*(0.5-XOral))

$ -wsOrAb*(XAbpl**2*(1-2*XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))

CC=wOrAb*(XAbal**2*(1-2*XOral)+XAbal*XAnal*(0.5-XOral)

$ -wOrAb*(XAbpl**2*(1-2*XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))

$ +wAbOr*(2*XAbal*XOral*(1-XOral)+XAbal*XAnal*(0.5-XOral))

$ -wAbOr*(2*XAbpl*XOrpl*(1-XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))

$ +wAbAn*(XAbal*XAnal*(0.5-XOral-2*XAnal))

$ -wAbAn*(XAbpl*XAnpl*(0.5-XOrpl-2*XAnpl))

$ +wAnAb*(XAbal*XAnal*(0.5-XOral-2*XAbal))

$ -wOrAn*((XAnpl**2*(1-2*XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))

$ -(XAnal**2*(1-2*XOral)+XAbal*XAnal*(0.5-XOral)))

$ -wAnOr*((2*XAnpl*XOrpl*(1-XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))

$ -(2*XAnal*XOral*(1-XOral)+XAbal*XAnal*(0.5-XOral)))

$ -wOrAbAn*(XAbpl*XAnpl*(1-2*XOrpl)-XAbal*XAnal*(1-2*XOral))

$ -wAnAb*(XAbpl*XAnpl*(0.5-XOrpl-2*XAbpl))

TTOr=CC/COr-273.15

SUMl=abs(abs(TTAn)-abs(TTAb))+abs(abs(TTAn)-abs(TTOr))

$ +abs(abs(TTAb)-abs(TTOr))

if(SUMl.lt.SUM)then

SUM=SUMl

XAnp=XAnpl

XAbp=XAbpl

XOrp=XOrpl

XCnp=XCnpl

XAna=XAnal

XAba=XAbal

XOra=XOral

XCna=XCnal

TAn=TTAn

TAb=TTAb

TOr=TTOr

结晶岩热力学软件

结晶岩热力学软件

6.计算实例

北京地区八达岭花岗杂岩体,对臼峪花岗岩(白志民等,1991)中二长石的成分、含量和平衡温度计算。采用最小二乘法,由全岩化学成分和各矿物化学成分计算,求得两种长石的总成分为:XAn0.083,XAb0.382,xor0.222,相当于XAn0.121,XAb0.556,xor0.323。假定岩体固结压力为0.3GPa。经过5次迭代,计算结果见下表。

输出文件:exam56.dat

结晶岩热力学软件

结晶岩热力学软件


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12025787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存