利用socket连接。接到请求的一方建立ServerSocket
发出请求的一方作为客户,建立与ServerSocket的连接。然后客户端开启一个写socket的线程,把本地文件写道Socket的输出流中。在server端开启读线程,从socket的输入流中读取内容保存到本地硬盘
发出请求的一方作为客户,建立与ServerSocket的连接。然后客户端开启一个写socket的线程,把本地文件写道Socket的输出流中。在server端开启读线程,从socket的输入流中读取内容保存到本地硬盘
█┏━━━━━┓█
█★ ★█
█ ☆ up ☆ █
█ █
█ 〖初窥Java〗 █
█ 【虚心学习】 █
█★ ★█
█┗━━━━━┛█
█████████
import java.net.*;/**
* <p>Title: This follow is newman's writing</p>
* <p>Description: I want better writing ,instead of best one!</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: [email protected]</p>
* @author Newman
* @version 1.0
*
* 发送端开客户机,接收端开服务器
*/
public class NetFileTransmitterServer extends Thread{ private int m_nPort =8765;
private Socket m_sClient=null;
private File m_file=null;//file to receive
private String m_szFileName="";//file to receive
private long m_lngFileLength=0; private PrintStream m_Out=null;
private BufferedInputStream m_In=null;
private String m_szMsg="";//receive message
//private boolean m_bReady=false;//is Server ready
private int m_nContentLength=4096;
private long m_lngTimeStart=0;//起始时间
private long m_lngFileLengthReceived=0;//文件接收的长度
public NetFileTransmitterServer() {
} /**
* get port to transmit file
* @return
*/
public int getPort() {
return m_nPort;
}
/**
* set port to transmit file
* @param m_nPort
*/
public void setPort(int m_nPort) {
this.m_nPort = m_nPort;
}
/**
* set file to transmit
* @param file
*/
public void setTransmitFile(File file){
this.m_file =file;
}
public void run(){
try {
ServerSocket ss=new ServerSocket(this.m_nPort);
System.out.println("Server start...");
this.m_sClient=ss.accept();
System.out.println("accept a client."+this.m_sClient.getInetAddress() .getHostName());
this.m_Out=new PrintStream(this.m_sClient.getOutputStream());
this.m_In=new BufferedInputStream(this.m_sClient.getInputStream());
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(this.m_file));
System.out.println("reading data now..."); boolean flag=false;
byte[]data=new byte[this.m_nContentLength];//信息符 + 数据
int count=0;
System.out.println("server is reading data now...");
this.m_lngTimeStart=System.currentTimeMillis();
while (!flag) {
this.m_szMsg=this.readLine(this.m_In);
//System.out.println("Server msg: "+this.m_szMsg); /**
* 控制
* QUIT
* READY
* ROGER
*
* 文件发送
* FILETRANSMITSTART
* FILENAME=abc.jpg
* FILELENGTH=8874
* FILECONTENT CONTENTLENGTH=1024
* sdfjkawena
* FILETRANSMITEND
*/
if (this.m_szMsg.startsWith(FileTransmitCommands.QUIT)) {
this.m_Out.println(FileTransmitCommands.QUIT);
this.m_sClient.close() ;
this.m_In.close();
flag=true;
System.out.println("Server Quit"); System.out.println("Server time elapse: "+(System.currentTimeMillis()-this.m_lngTimeStart)+",speed: "+this.getSpeed());
return;
}
else if (this.m_szMsg.startsWith(FileTransmitCommands.READY)) {
this.m_Out.println(FileTransmitCommands.READY);
this.m_Out.println(FileTransmitCommands.ROGER);
}
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILETRANSMITSTART)) {//a file
this.m_szFileName="";
this.m_lngFileLength=0;
}
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILENAME)) {
int pos=this.m_szMsg.indexOf("=")+1;
this.m_szFileName=this.m_szMsg.substring(pos);//文件名
}
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILELENGTH)) {
int pos=this.m_szMsg.indexOf("=")+1;
String temp=this.m_szMsg.substring(pos);//文件内容长度
try {
this.m_lngFileLength=Long.parseLong(temp);
}
catch (NumberFormatException ex) {
ex.printStackTrace();
}
} else if (this.m_szMsg.startsWith(FileTransmitCommands.FILECONTENT)) {
int pos=this.m_szMsg.indexOf("=")+1;
String temp="";
temp=this.m_szMsg.substring(pos);//文件内容长度
try {
this.m_nContentLength=Integer.parseInt(temp);
data=new byte[this.m_nContentLength];
this.m_In.read(data,0,this.m_nContentLength); bos.write(data,0,this.m_nContentLength) ;
m_lngFileLengthReceived+=this.m_nContentLength;
}
catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILETRANSMITEND)) {
//System.out.println("m_szFileName: "+this.m_szFileName);
System.out.println("file parse end");
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
} /**
* get speed
* @return
*/
public long getSpeed(){
return this.m_lngFileLength/(System.currentTimeMillis()-this.m_lngTimeStart);
}
public String readLine(InputStream is) throws IOException {
StringBuffer result=new StringBuffer ();
boolean finished=false;
boolean isenter=false; while(!finished){
int ch=-1;
ch=is.read();
if((isenter)&&(ch==10)){// if it is "\n\r"
result.setLength(result.length()-1);//had added "\n",remove it
return result.toString ();
}
if(ch==13)//if enter pressed
isenter=true;
else
isenter=false; if(ch==-1)//end
return result.toString ();
else
result.append ((char)ch);
}
return result.toString ();
} public static void main(String[] args) throws Exception{
NetFileTransmitterServer server=new NetFileTransmitterServer();
//server.setTransmitFile(new File("TransmitFile_test.txt"));
server.setTransmitFile(new File("math.chm"));
server.start() ;
}
}
错语是
D:\network\NetFileTransmitterServer.java:96: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
if (this.m_szMsg.startsWith(FileTransmitCommands.QUIT)) {
^
D:\network\NetFileTransmitterServer.java:97: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
this.m_Out.println(FileTransmitCommands.QUIT);
^
D:\network\NetFileTransmitterServer.java:106: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
else if (this.m_szMsg.startsWith(FileTransmitCommands.READY)) {
^
D:\network\NetFileTransmitterServer.java:107: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
this.m_Out.println(FileTransmitCommands.READY);
^
D:\network\NetFileTransmitterServer.java:108: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
this.m_Out.println(FileTransmitCommands.ROGER);
^
D:\network\NetFileTransmitterServer.java:110: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILETRANSMITSTART)) {//a file
^
D:\network\NetFileTransmitterServer.java:114: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILENAME)) {
^
D:\network\NetFileTransmitterServer.java:118: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILELENGTH)) {
^
D:\network\NetFileTransmitterServer.java:129: 不能解析符号
符号:变量 FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILECONTENT)) {
^
D:\network\NetFileTransmitterServer.java:145: 不能解析符号
符号:变??FileTransmitCommands
位置:类 in chatbar.filetransmit.NetFileTransmitterServer
else if (this.m_szMsg.startsWith(FileTransmitCommands.FILETRANSMITEND)) {
^
是不是FileTransmitCommands没有定义呀?