import java.io.*;
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),紅崗企業(yè)網(wǎng)站建設(shè),紅崗品牌網(wǎng)站建設(shè),網(wǎng)站定制,紅崗網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,紅崗網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
import java.net.*;public class ftpServer extends Thread{ public static void main(String args[]){
String initDir;
initDir = "D:/Ftp";
ServerSocket server;
Socket socket;
String s;
String user;
String password;
user = "root";
password = "123456";
try{
System.out.println("MYFTP服務(wù)器啟動(dòng)....");
System.out.println("正在等待連接....");
//監(jiān)聽21號(hào)端口
server = new ServerSocket(21);
socket = server.accept();
System.out.println("連接成功");
System.out.println("**********************************");
System.out.println("");
InputStream in =socket.getInputStream();
OutputStream out = socket.getOutputStream();
DataInputStream din = new DataInputStream(in);
DataOutputStream dout=new DataOutputStream(out);
System.out.println("請等待驗(yàn)證客戶信息....");
while(true){
s = din.readUTF();
if(s.trim().equals("LOGIN "+user)){
s = "請輸入密碼:";
dout.writeUTF(s);
s = din.readUTF();
if(s.trim().equals(password)){
s = "連接成功。";
dout.writeUTF(s);
break;
}
else{s ="密碼錯(cuò)誤,請重新輸入用戶名:";br dout.writeUTF(s);br br }
}
else{
s = "您輸入的命令不正確或此用戶不存在,請重新輸入:";
dout.writeUTF(s);
}
}
System.out.println("驗(yàn)證客戶信息完畢...."); while(true){
System.out.println("");
System.out.println("");
s = din.readUTF();
if(s.trim().equals("DIR")){
String output = "";
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
for(int i=0;idirStructure.length;i++){
output +=dirStructure[i]+"\n";
}
s=output;
dout.writeUTF(s);
}
else if(s.startsWith("GET")){
s = s.substring(3);
s = s.trim();
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
String e= s;
int i=0;
s ="不存在";
while(true){
if(e.equals(dirStructure[i])){
s="存在";
dout.writeUTF(s);
RandomAccessFile outFile = new RandomAccessFile(initDir+"/"+e,"r");
byte byteBuffer[]= new byte[1024];
int amount;
while((amount = outFile.read(byteBuffer)) != -1){
dout.write(byteBuffer, 0, amount);break;
}break;
}
else if(idirStructure.length-1){
i++;
}
else{
dout.writeUTF(s);
break;
}
}
}
else if(s.startsWith("PUT")){
s = s.substring(3);
s = s.trim();
RandomAccessFile inFile = new RandomAccessFile(initDir+"/"+s,"rw");
byte byteBuffer[] = new byte[1024];
int amount;
while((amount =din.read(byteBuffer) )!= -1){
inFile.write(byteBuffer, 0, amount);break;
}
}
else if(s.trim().equals("BYE"))break;
else{
s = "您輸入的命令不正確或此用戶不存在,請重新輸入:";
dout.writeUTF(s);
}
}
din.close();
dout.close();
in.close();
out.close();
socket.close();
}
catch(Exception e){
System.out.println("MYFTP關(guān)閉!"+e);
}
}}
我這里有一個(gè)例子希望能夠幫助你
public class Client{
private Socket socket;
try{
Socket socket=new Socket ("localhoast',8088);
ip=InetAddress.getLocalHost();
String localip=ip.getHostAddress();
System.out.println(localip);
String name=ip.getHostName();
System.out.println(name);
}
catch(Exception e){
}
public void start(){
try{
Run r2=new Run();
Thread t1=new Thread(r2);
t1.setDaemon(true);
t1.start();
Scanner sc=new Scanner(System.in);
OutputStream os=socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
PrintWriter writer=new PrintWriter(osw,true);
while(true){
writer.println(sc.nextLine());
}
}catch(Exception e){
}
}
public static void main(String args[]){
Client client=new Client();
client.start();
}
class Run implements Runnable{
public void run() {
while(true){
try {
InputStream is=socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
while(true){
String str=br.readLine();
System.out.println("服務(wù)器說:"+str);
if("bye".equals(str)){
System.out.println("再見客戶端");
System.out.println("聊天結(jié)束");
}
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
1.TCP服務(wù)端的程序編寫
package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MyTcp{
private BufferedReader reader;
private ServerSocket serverSocket;
private Socket socket;
/**
* 創(chuàng)建服務(wù)端的程序,讀取客戶端傳來的數(shù)據(jù)
*/
void getserver(){
try {
serverSocket = new ServerSocket(8998); //實(shí)例化服務(wù)端socket
System.out.println("服務(wù)器套接字已經(jīng)創(chuàng)建成功");
while (true) {
System.out.println("等待客戶機(jī)的連接:");
socket = serverSocket.accept(); //實(shí)例化socket對象
reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //實(shí)例化BufferReader對象
getClientMessage();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void getClientMessage() {
try {
while (true) {
System.out.println("客戶機(jī)傳來的信息是:"+reader.readLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MyTcp myTcp = new MyTcp(); //創(chuàng)建本類對象
myTcp.getserver();
}
}
2.TCP客戶端程序編寫
package test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.net.Socket;
import java.nio.channels.WritableByteChannel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
public class MyTcpClient extends JFrame{
private PrintWriter printWriter;
Socket socket;
private JTextField jTextField = new JTextField();
private JTextArea jTextArea = new JTextArea();
Container container;
/**
* 創(chuàng)建的Tcp客戶端程序
*/
public MyTcpClient (String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container = this.getContentPane();
final JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setBorder(new BevelBorder(BevelBorder.RAISED)); //顯示邊框
getContentPane().add(jScrollPane,BorderLayout.CENTER);
jScrollPane.setViewportView(jTextArea);
container.add(jTextField,"South"); //將文本框放在窗體下面
jTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
printWriter.println(jTextField.getText()); //將文本框的信息寫入流(為下面的輸出流寫入信息做準(zhǔn)備)
jTextArea.append(jTextField.getText() + "\n");
jTextArea.setSelectionEnd(jTextArea.getText().length());
jTextField.setText(null);
}
});
}
private void connect() {
jTextArea.append("嘗試連接中...\n");
try {
socket = new Socket("127.0.0.1",8998);
printWriter = new PrintWriter(socket.getOutputStream(),true); //將printwriter中的信息流寫入到套接字的輸出流傳送給服務(wù)端
jTextArea.setText("已完成連接\n\n");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MyTcpClient myTcpClient = new MyTcpClient("向服務(wù)器發(fā)送數(shù)據(jù)");
myTcpClient.setSize(500,200);
myTcpClient.setVisible(true);
myTcpClient.connect();
}
}
3.效果展示
1先將服務(wù)端的程序跑起來
2再將客戶端的程序跑起來
3.客戶端和服務(wù)端進(jìn)行交互
摘要
本文解釋了如何利用庫用Java語言編寫FTP客戶端代碼。它比較了FTP庫的一個(gè)完全列表,演示了每個(gè)庫的優(yōu)點(diǎn)和缺點(diǎn),并且?guī)椭鷽Q策者為他們的需要選擇適當(dāng)?shù)膸?。另外,本文闡述了Fa?ade模式如何在取代一個(gè)庫時(shí)改變管理。最后,作者Jean-Pierre Norguet討論并解決了由于缺乏權(quán)威性的說明書引起的一些問題。
讓我們假設(shè)一個(gè)情景:我們要編寫一個(gè)純Java應(yīng)用程序,該程序必須從運(yùn)行FTP服務(wù)器的遠(yuǎn)程計(jì)算機(jī)上下載文件。我們也通過遠(yuǎn)程文件信息,像名字、日期、或者尺寸,來過濾下載。
自己來寫一個(gè)FTP協(xié)議處理,盡管是有可能,并且可能很有趣。但是這樣做也有可能有困難、花費(fèi)長時(shí)間、并且有潛在的風(fēng)險(xiǎn)。既然我們不肯花費(fèi)時(shí)間、精力、或者金錢自己來寫一個(gè)處理器,那我們推薦使用一個(gè)可重用的現(xiàn)有的軟件組件。萬維網(wǎng)上有并且大量的庫可供使用。有了一個(gè)FTP客戶端庫,下載一個(gè)文件用Java語言編寫就像下面一樣簡單:
FTPClient ftpClient = new FTPClient();
ftpClient.connect("", "user01", "pass1234");
ftpClient.download("C:\\Temp\\", "README.txt");
// Eventually other operations here ...
ftpClient.disconnect();
尋找一個(gè)適合我們需要的高質(zhì)量的Java FTP客戶端庫并不像他看起來那么簡單;它可能相當(dāng)困難。要找到一個(gè)Java FTP客戶端庫需要花一些時(shí)間。接著,在我們找到所有的已存在的庫之后,我們選哪個(gè)?每個(gè)庫適合不同的需要。庫在質(zhì)量上是不等的,并且它們的設(shè)計(jì)有本質(zhì)的區(qū)別。每個(gè)提供一套不同的屬性和使用不同類型的行話來描述他們。
因此,計(jì)算和比較FTP客戶端庫證明是困難而且令人迷惑的。重復(fù)使用已存在的組件是一個(gè)值得推薦的過程,但在這個(gè)例子中,啟動(dòng)它也是令人沮喪的。并且這有點(diǎn)羞愧:在選好的一個(gè)好的FTP庫之后,剩下的工作就是例程了。
本文旨在使選擇過程簡短、容易、并且有價(jià)值。我首先列出了所有的FTP客戶端庫。接著,我定義和描述了庫應(yīng)該用某種方式找到的相關(guān)標(biāo)準(zhǔn)的一個(gè)表格。最后,我列出了一個(gè)總瀏覽的矩陣,該矩陣給出了庫間相互比較的過程的快速瀏覽。所有的信息提供了我們作出一個(gè)迅速、可靠、和長期的決定所需的每件事。
使用JDK(Java 開發(fā)工具集)的FTP支持
用于FTP的訪問規(guī)范是用于注釋的請求:959(RFC959)。Sun Microsystems提供了JDK的一個(gè)RFC959執(zhí)行。但是它是內(nèi)部的、非文檔化的、并且不提供任何資源。當(dāng)RFC959在尚未公開時(shí),它實(shí)際上是執(zhí)行RFC1738、URL規(guī)范的一個(gè)公共界面的后終端。如圖1。
圖1. 使用JDK的FTP支持。
RFC1738的一個(gè)執(zhí)行過程在JDK中作為標(biāo)準(zhǔn)給出。它為基本的FTP傳送做一個(gè)可推理的工作。它是公共的、文檔化的、并且提供源代碼。要使用它,我們可編寫下面語句:
URL url = new URL(";type=i");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream(); // To download
OutputStream os = urlc.getOutputStream(); // To upload
使用JDK的FTP客戶端嚴(yán)格的遵守標(biāo)準(zhǔn)推薦,但它有以下幾個(gè)說明:
它從根本上區(qū)別于第三方的FTP客戶端庫;這些執(zhí)行RFC959而不是RFC1738
RFC959用大多數(shù)的桌面FTP客戶端工具執(zhí)行。許多Java程序員使用這些工具連接到FTP服務(wù)器上。作為一個(gè)嘗試,這些工具及有可能優(yōu)先于類似的RFC959庫。
URL 和URLConnection類只開放用于通訊的流。Sun庫不為構(gòu)造原始的FTP服務(wù)器響應(yīng)成為像String、 File、 RemoteFile、 或者 Calendar之類的更合用的Java對象而提供直接支持。所以我們不得不編寫更多的代碼,只是為了把數(shù)據(jù)寫入一個(gè)文件中或者開始一個(gè)目錄列表。
正像RFC1738的3.2部分解釋的一樣,"最優(yōu)化",F(xiàn)TP URL在每個(gè)操作后要求關(guān)閉(控制)連接。這對于傳送許多小文件是一種浪費(fèi)、并且毫無效率。而且,作了特別限制FTP服務(wù)器可能把會(huì)這樣一個(gè)通訊開銷認(rèn)為一個(gè)是惡毒的網(wǎng)絡(luò)攻擊或者濫用而拒絕提供進(jìn)一步的服務(wù)。
最后,它缺乏幾個(gè)有用的屬性。
由于以上所有或者某種原因,可優(yōu)先使用一個(gè)第三方的庫。下面部分列出了可供選擇的第三方的庫。
見:
文章標(biāo)題:java中寫客戶端代碼 java中寫客戶端代碼的軟件
URL地址:http://muchs.cn/article18/dohoggp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站導(dǎo)航、網(wǎng)站收錄、定制網(wǎng)站、商城網(wǎng)站、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)