和昨天的類似,只是今天學習了文件的傳遞,主要是加深對socket的理解以及對IO操作中DataInputStream和DataOutputStream類的使用,主要程序代碼如下:
服務器端:
package test.net;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
?* 本例為通過socket編程實現從服務器端發送文件到客戶端
?* @author zouqingbing
?*/
public class fileServer {
?public static void main(String[] a) {
??fileServer fileServer = new fileServer();
??fileServer.sendFile();
?}
?public void sendFile() {
??byte[] buffer = new byte[1024];// 定義一byte類型的緩沖區。
??try {
???ServerSocket ssocket = new ServerSocket(2000);
???System.out.println("服務器啟動!");
???Socket socket = ssocket.accept();
???int length = 0;
???File f = new File("d:\\aaa.txt");
???FileInputStream fis = new FileInputStream(f);
???DataInputStream dataIn = new DataInputStream(fis);
???DataOutputStream dataOut = new DataOutputStream(socket
?????.getOutputStream());
???while ((length = dataIn.read(buffer)) != -1) {
????dataOut.write(buffer, 0, length);
???}
???dataOut.flush();
???dataOut.close();
???fis.close();
???System.out.println("文件傳送完畢!!!");
???socket.close();
??} catch (IOException ex) {
???ex.printStackTrace();
??}
?}
}
客戶端:package test.net;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
?* 本例使用socket編程實現從服務器端接收程序到客戶端
?* @author zouqingbing
?*/
public class fileClient {
?public static void main(String[] args) {
??fileClient fileClient = new fileClient();
??fileClient.receiveFile();
?}
?public void receiveFile() {
??byte[] buffer = new byte[1024];
??int length = 0;
??try {
???Socket socket = new Socket("10.40.2.7", 2000);
???DataInputStream dataIn = new DataInputStream(socket
?????.getInputStream());
???File f = new File("d:\\fff.txt");
???if (!f.exists())
????f.createNewFile();
???FileOutputStream fos = new FileOutputStream(f);
???while ((length = dataIn.read(buffer)) != -1) {
????fos.write(buffer, 0, length);
???}
???fos.close();
???System.out.println("客戶端文件接收完畢!!!");
???socket.close();
??} catch (IOException e) {
???e.printStackTrace();
??}
?}
}
另,要注意的是在socket通訊完畢后要關閉文件和socket連接,這里我起初沒有關閉,結果拋出異常,關閉后就ok了.