當前位置:首頁 » 編程軟體 » 網路編程題目

網路編程題目

發布時間: 2023-07-08 17:55:15

Ⅰ 設整形變數x=10,則表達式2<x<8的值

編輯
:kenwoodjw
對於機器學習演算法工程師而言,python是不可或缺的語言,它的優美與簡潔令人無法自拔。那麼你過Python編程面試題嗎?從Python基礎到網頁爬蟲你是否能全方位Hold住?今天,為讀者們推薦一個Github項目。
在這個項目中, kenwoodjw 准備了近 300 道 Python 面試題,同時還包含解決方案與代碼。主要從 Python 基礎、高級語句、網頁應用、資料庫和測試等角度提問,讀者可只自己需要的領域。目前該項目已經完成了很多基礎和高級面試題,本文主要摘取一些 Python 面試題供大家參考。
項目地址:https://github.com/kenwoodjw/python_interiew_question
總體而言,項目有近300道面試題。雖然該項目剛開始創建,但很多Python面試題都已經提供決方案。如下所示為面試題示例:
本文截取了一些面試題及解決方案:
Python 基礎文件操作模塊與包數據類型企業面試題Python 高級設計模式系統編程如果希望機器學習面試題,可閱讀:春招已近,這份GitHub萬星的ML演算法面試大全請收下
Python 基礎
什麼是 Python?根據Python 創建者 Guido an Rossum 所言,Python是一種高級編程語言,其設計的核心理念是代碼的易讀性,以及允許編程者通過若干行代碼輕松表達想法創意。實際上,很多開發者選擇學習 Python 的首要原因是其編程的優美性,用它編碼和表達想法非常自然。
文件操作
1.若有一個jsonline格式的文件file.txt,大小約為10K,我們的處理方式為:
defget_lines(): l = []with open('file.txt', 'rb') as f:for eachline in f: l.append(eachline)return lif __name__ == '__main__':for e in get_lines(): process(e) #處理每一行數據
現在要處理一個大小為10G的file.txt文件,但是內存只有4G。如果在只修改get_lines 函數而其他代碼保持不變的情況下,應該如何實現?需要考慮的問題都有那些?
defget_lines(): l = []with open('file.txt','rb') as f: data = f.readlines(60000) l.append(data)yield l
要考慮的問題有:內存只有4G,無法一次性讀入10G文件。而分批讀入數據要記錄每次讀入數據的位置,且分批每次讀取得太小會在讀取操作上花費過多時間。
模塊與包
2.如何輸入日期, 判斷這一天是這一年的第幾天?
import datetimedefdayofyear(): year = input("請輸入年份: ") month = input("請輸入月份: ") day = input("請輸入天: ") date1 = datetime.date(year=int(year),month=int(month),day=int(day)) date2 = datetime.date(year=int(year),month=1,day=1)return (date1-date2).days+1數據類型
3.如何反轉字元串"aStr"?
print("aStr"[::-1])4.下面代碼的輸出結果將是什麼?會報錯嗎?
list = ['a','b','c','d','e']print(list[10:])
代碼將輸出[],並不會產生IndexError 錯誤。如果嘗試用超出成員的個數的index來獲取某個列表的成員,那就會報錯。例如,嘗試獲取 list[10] 和之後的成員,會導致IndexError。然而當我們嘗試獲取列表的切片時,開始的index超過成員個數並不會產生IndexError,而是僅僅返回一個空列表。因為並不會報錯,所以這種Bug很難追蹤到。
5.請寫出一段Python代碼,實現刪除list裡面的重復元素?
l1 = ['b','c','d','c','a','a']l2 = list(set(l1))print(l2)用list類的sort方法可以保證順序不變:
l1 = ['b', 'c', 'd', 'c', 'a', 'a']l2 = list(set(l1))l2.sort(key=l1.index)print(l2)也可以這樣寫:
l1 = ['b', 'c', 'd', 'c', 'a', 'a']l2 = sorted(set(l1), key=l1.index)print(l2)
也可以用遍歷:
l1 = ['b', 'c', 'd', 'c', 'a', 'a']l2 = []for i in l1:ifnot i in l2: l2.append(i)print(l2)企業面試題
6.設計實現遍歷目錄與子目錄,抓取.pyc文件
第一種方法:
import osdefgetFiles(dir, suffix): res = []for root, dirs, files in os.walk(dir):for filename in files: name, suf = os.path.splitext(filename)if suf == suffix: res.append(os.path.join(root, filename)) print(res)getFiles("./", '.pyc')
第二種方法:
import osdefpick(obj):try:if obj.[-4:] == ".pyc": print(obj)except:returnNonedefscan_path(ph): file_list = os.listdir(ph)for obj in file_list:if os.path.isfile(obj): pick(obj)elif os.path.isdir(obj): scan_path(obj)if __name__ == '__main__': path = input('輸入目錄') scan_path(path)
7.如何反轉一個整數,例如-123--> -321?
classSolution(object):defreerse(self, x):if-10 < x=""><>return x str_x = str(x)if str_x[0] != "-": str_x = str_x[::-1] x = int(str_x)else: str_x = str_x[1:][::-1] x = int(str_x) x = -xreturn x if-2147483648 < x=""><>if __name__ == '__main__': s = Solution() reerse_int = s.reerse(-120) print(reerse_int)
Python高級
Python高級包含很多重要的模塊,例如函數、類和實例、系統編程、正則表達式、網路編程等等。根據這些高級屬性,Python可用於數據科學、網頁開發、機器學習等等。
設計模式
8.對設計模式的理解,簡述你的設計模式?
設計模式是為我們經常會碰到的一些編程問題構建的可重用解決方案,它是總結性和經優化的。一個設計模式並不像一個類或一個庫那樣能夠直接作用於我們的代碼,反之,設計模式更為高級,它是一種在特定情形下實現的方法模板。常見的是工廠模式和單例模式。
單例模式應用的場景一般發現在以下條件下: 資源共享的情況下,避免由於資源操作時導致的性能或損耗等,如日誌文件,應用配置。控制資源的情況下,方便資源之間的互相通信。
9.生成器和迭代器的區別?
迭代器是一個更抽象的概念,任何對象,如果它的類有 next 方法和 iter 方法返回自己本身,它就是可迭代的。對於 string、list、dict、tuple 等這類容器對象,使用for循環遍歷是很方便的,for 語句實際上會對容器對象調用 iter() 函數。iter() 會返回一個定義了 next() 方法的迭代器對象,它在容器中逐個訪問容器內元素,在沒有後續元素時,next()會拋出一個StopIteration異常。
生成器(Generator)是創建迭代器的簡單而強大的工具。它們寫起來就像是正規的函數,只是在需要返回數據的時候使用yield語句。生成器能做到迭代器能做的所有事,而且因為自動創建iter()和next()方法,生成器顯得特別簡潔,而且生成器也是高效的,使用生成器表達式取代列表解析可以同時節省內存。除了創建和保存程序狀態的自動方法,當發生器終結時,還會自動拋出StopIteration異常。
10.對裝飾器的理解,你能寫出一個計時器裝飾器,它能記錄函數的執行時間嗎?
裝飾器本質上是一個Python函數,它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數對象。
import timedeftimeit(func):defwrapper(): start = time.clock() func() end = time.clock() print('used:',end-start)return wrapper @timeitdeffoo(): print('in foo()'foo())
系統編程
11.介紹一下你的進程。
程序運行在操作系統上的一個實例,就稱之為進程。進程需要相應的系統資源:內存、時間片、pid。創建進程: 首先要導入multiprocessing中的Process;創建一個Process對象;創建Process對象時,可以傳遞參數。
p = Process(target=XXX, args=(tuple,), kwargs={key: alue})target = XXX # 指定的任務函數,不用加()args = (tuple,)kwargs = {key: alue} # 給任務函數傳遞的參數使用start()啟動進程 結束進程 給子進程指定函數傳遞參數Demo
import osfrom mulitprocessing import Processimport timedefpro_func(name, age, **kwargs):for i in range(5): print("子進程正在運行中,name=%s,age=%d,pid=%d" % (name, age, os.getpid())) print(kwargs) time.sleep(0.2)if __name__ == "__main__":# 創建Process對象 p = Process(target=pro_func, args=('小明', 18), kwargs={'m': 20})# 啟動進程 p.start() time.sleep(1)# 1秒鍾之後,立刻結束子進程 p.terminate() p.join()12.談談你對多進程、多線程、以及協程的理解,項目是否用?
進程:一個運行的程序(代碼)就是一個進程,沒有運行的代碼叫程序,進程是系統資源分配的最小單位,進程擁有自己獨立的內存空間,所有進程間數據不共享,開銷大。線程: cpu調度執行的最小單位,也叫執行路徑,不能獨立存在,依賴進程存在,一個進程至少有一個線程,叫主線程,而多個線程共享內存可以極大地提高了程序的運行效率。協程: 是一種用戶態的輕量級線程,協程的調度完全由用戶控制,協程擁有自己的寄存器上下文和棧。協程調度時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操中棧則基本沒有內核切換的開銷,可以不加鎖的訪問全局變數,所以上下文的切換非常快。
關於系統編程還有很多問題,例如:
本文為編輯,請聯系本獲得授權。

Ⅱ QT 網路編程問題

哈哈 同是qt菜鳥 。因該是產生新的進程。一個客戶端進程對應一個伺服器端進程。

Ⅲ 關於c#的Socket非同步網路編程問題

這樣的寫法有點問題:

1)伺服器端既然採用了非同步方式Accept,就沒有必要再啟線程

2)估計allDone是一個ManualResetEvent。用ManualResetEvent的目的什麼呢?

伺服器端採用非同步Accept的代碼其實很簡單,也不需要ManualResetEvent同步

publicclassAppTCPServer
{
publicAppTCPServer(stringlocalIP,intport)
{
Socketsocket=newSocket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
EndPointlocalEP=newIPEndPoint(IPAddress.Parse(localIP),port);
socket.Bind(localEP);
socket.Listen(100);
socket.BeginAccept(AcceptAsync,socket);
}

privatevoidAcceptAsync(IAsyncResultar)
{
Socketsocket=ar.AsyncStateasSocket;
try
{
Socketclient=socket.EndAccept(ar);
Console.WriteLine("客戶端連接成功!客戶端:{0}",client.RemoteEndPoint.ToString());
if(OnConnected!=null)
{
OnConnected(this,newClientConnectedEventArgs(client));
}
}
catch(Exceptione)
{
Console.WriteLine("AcceptAsync發生異常,異常信息: {0}",e.Message);
}
finally
{
//繼續非同步Accept
socket.BeginAccept(AcceptAsync,socket);
謹賀}
}

//客戶端連接後的事件OnConnect
publiceventEventHandler<ClientConnectedEventArgs>OnConnected;
}

///<summary>
///事件參數:接收客戶端連接後的事件參數
///</summary>
:EventArgs
答雹{
(SocketclientSocket)
{
ClientSocket=clientSocket;
}
publicSocketClientSocket{get;privateset;}
}

classProgram
{
staticvoidMain(string[]args)
{
祥舉派AppTCPServerserver=newAppTCPServer("127.0.0.01",8000);
server.OnConnected+=server_OnConnected;
Console.WriteLine("按任意鍵結束程序……");
Console.ReadKey();
}

staticvoidserver_OnConnected(objectsender,ClientConnectedEventArgse)
{
Socketclient=e.ClientSocket;
stringhello="HellofromAppTCPServer";
client.Send(Encoding.Default.GetBytes(hello));
}
}

客戶端測試程序

classProgram
{
staticvoidMain(string[]args)
{
//模擬100個客戶連接伺服器
for(inti=0;i<100;i++)
{
Socketsocket=ConnectToServer("127.0.0.1",8000);
byte[]buffer=newbyte[1024];
intbytesRecevied=socket.Receive(buffer,buffer.Length,SocketFlags.None);
byte[]messageBytes=newbyte[bytesRecevied];
Array.Copy(buffer,messageBytes,bytesRecevied);
Console.WriteLine(Encoding.Default.GetString(messageBytes));
socket.Disconnect(false);
socket.Close();
}
Console.ReadKey();staticSocketConnectToServer(stringserverIP,intserverPort)
{
Socketsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
EndPointlocalEP=newIPEndPoint(IPAddress.Any,0);
socket.Bind(localEP);
socket.Connect(newIPEndPoint(IPAddress.Parse(serverIP),serverPort));
returnsocket;
}
}

Ⅳ 求助網路編程題目.C++

一.概述
TCP/IP協議是一個四層協議,它由應用層、傳輸層、網路層和鏈路層構成。TCP/IP協議棧的每一層都由許多協議構成,從而構成了一個協議簇。
應用層主要包括的協議有Telnet、ftp、HTTP、SMTP/POP3和DNS等。

傳輸層主要包括的協議有TCP和UDP。

網路層主要包括IP和IP的附屬協議。

數據鏈路層主要包括的協議有ARP(地址解析協議)、RARP協議、Ethernet協議等。
FTP(File Transfer Protocol)協議主要用來在網路上進行文件傳輸。FTP通訊除了有一個默認的埠21外,還有其他埠,同城兩個埠同時進行數據傳輸。一個是默認的埠(通常為21),主要進行控制連接,即進行命令協議及伺服器端響應碼的傳輸。另一個非標准埠主要進行數據,上傳下載文件等。

關於FTP協議和FTP命令的詳細描述,參考《Visual C 網路通信編程實用案例精選》。
實現FTP協議,有兩種方式,實用WinInet API和使用基本Winsock。對於一般應用,用WinInet效率要高,而且簡單。也可以用Winsock來編寫,這樣更加靈活,但是復雜度高且需要對協議非常熟悉。

二.VC開發
在項目中,為了開發效率,使用了WinInet的方式。

FTP是MFC的WinInet支持的三個Internet功能(HTTP, gopher)之一,我們需要先創建一個CInternetSession實例和一個CFtpConnection對象就可以實現和一個 FTP伺服器的通信。不需要直接創建CFtpConnection對象,而是通過調用CInternetsession::GetFtpConnection來完成這項工作。它創建CFtpConnection對象並返回一個指向該對象的指針。

要聯接到FTP伺服器,需要兩個步驟,首先必須創建一個CInternetSession對象,用類CInternetSession創建並初始化一個或幾個同時存在的Internet會話(session),並描述與代理伺服器的連接(如果有必要的話),如果在程序運行期間需要保持與Internet的連接,可以創建一個CInternetsession對象作為類CWinApp的成員。

然後利用CInternetsession對象獲取CFtpConnection對象。MFC中的類CFtpConnection管理我們與Internet伺服器的連接,並直接操作伺服器上的目錄和文件。

1.Ftp連接類的信息
下面我們簡要介紹連接類的信息

1.1 建立連接
CInternetsession對象

CInternetsession(LPCTSTR pstrAgent, DWORD dwConText, DWORD dwACCESSType, LPCTSTR pstrProxyName, LPCTSTR pstrProxyBypass, DWORD dwFlags);

在創建CInternetSession對象時調用這個成員函數,CInternetsession是應用程序第一個要調用的Internet函數,它將創始化內部數據結構,以備將來在應用程序中調用。如果dwFlags包含INTERNET_FLAG_ASYNC,那末從這個句柄派生的所有的句柄,在狀態回調常式注冊之前,都會出現非同步狀態。如果沒有打開Internet連接,CInternetsession就會拋出一個例外,AfxThrowInternetException。

GetFtpConnection()函數

CFtpConnection* CIternetsession::GetFtpConnection(LPCTSTR pstrServer, LPCTSTR pstrUserName, LPCTSTR pstrPassword, INTERNET_PORT nPort, BOOL bPassive);

調用這個函數建立一個FTP連接,並獲得一個指向CFtpConnection對象的指針,GetFtpConnection連接到一個FTP伺服器,創建並返回指向CFtpConnection對象的指針,它不在伺服器上進行任何操作。如果打算讀寫文件,必須進行分步操作。關於查找,打開和讀寫文件的信息需參考CFtpConnection和CFtpFileFind類。

對這個函數的調用返回一個指向CFtpConnection對象的指針。如果調用失敗,檢查拋出的CInternetException對象,就可以確定失敗的原因。

1.2 遠程目錄操作
CreateDirectory()函數

BOOL CreateDirectory( LPCTSTR pstrDirName );

Return Value

Nonzero if successful; otherwise 0. If the call fails, the Windows functionGetLastError may be called to determine the cause of the error.

Parameters

pstrDirName

A pointer to a string containing the name of the directory to create.

Remarks

Call this member function to create a directory on the connected server.

Use GetCurrentDirectory to determine the current working directory for this connection to the server. Do not assume that the remote system has connected you to the root directory.

The pstrDirName parameter can be either a partially or a fully qualified filename relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. CreateDirectory translates the directory name separators to the appropriate characters before they are used.

注意:CreateDir 在FTP伺服器上創建已經存在的文件夾時會 返回FALSE,而且只能創建到當前(根)目錄下

RemoveDirectory()函數

BOOL RemoveDirectory( LPCTSTR pstrDirName );

Return Value

Nonzero if successful; otherwise 0. If the call fails, the Win32 functionGetLastError may be called to determine the cause of the error.

Parameters

pstrDirName

A pointer to a string containing the directory to be removed.

Remarks

Call this member function to remove the specified directory from the connected server.

Use GetCurrentDirectory to determine the server』s current working directory. Do not assume that the remote system has connected you to the root directory.

The pstrDirName parameter can be either a partially or fully qualified filename relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. RemoveDirectory translates the directory name separators to the appropriate characters before they are used.

注意:DeleteDir文件夾中有內容,先刪除文件夾中文件,才可以刪文件夾,否則返回FALSE, 刪除不存在的文件夾返回FALSE

1.3 文件上傳下載刪除
GetFile()函數

BOOL GetFile(LPCTSTR pstrRemoteFile, LPCTSTR pstrLocalFile, BOOL bFailExists, DWORD dwAttributes, DWORD dwFlags, DWORD dwContext);

調用這個成員函數,可以從FTP伺服器取得文件,並且把文件保存在本地機器上。GetFile()函數是一個比較高級的常式,它可以處理所有有關從FTP伺服器讀文件,以及把文件存放在本地機器上的工作。如果dwFlags為 FILE_TRANSFER_TYPE_ASCII,文件數據的傳輸也會把控制和格式符轉化為Windows中的等階符號。默認的傳輸模式是二進制模式,文件會以和伺服器上相同的格式被下載。

pstrRemoteFile和 pstrLocalFile可以是相對於當前目錄的部分文件名,也可以是全文件名,在這兩個名字中間,都既可以用反斜杠(\)或者正斜杠(/)來作為文件名的目錄分隔符,GetFile()在使用前會把目錄分隔符轉化為適當的字元。

可以用自己選擇的值來取代dwContext默認的值,設置為上下文標識符與CFtpConnection對象的定位操作有關,這個操作由CFtpConnection中的CInternetSession對象創建。返回給CInternetsession::OnStatusCallBack的值指出了所標識操作的狀態。

如果調用成功,函數的返回為非0,否則返回0,如果調用失敗,可以調用Win32函數GetLastError(),確認出錯的原因。

需要注意:本地路徑須為絕對路徑,遠程路徑可為相對路徑,如hello/hello.zip,如果本地文件已經存在,則返回FALSE。

PutFile()函數

BOOL PutFile(LPCTSTR pstrLocalFile, LPCTSTR pstrRemoveFile ,DWORD dwFlags, DWORD dwContext);

調用這個成員函數可以把文件保存到FTP伺服器。PutFile()函數是一個比較高級的常式,它可以處理有關把文件存放到伺服器上的工作。只發送數據,或要嚴格控制文件傳輸的應用程序,應該調用OpenFile和 CInternet::Write。利用自己選擇的值來取代dwContext默認的值,設置為上下文標識符,上下文標識符是 CInternetSession對象創建的CFtpConnection對象的特定操作有關,這個值返回給CInternetsession::OnStateCallBack,從而把操作的狀態通報給它所標識的上下文。

如果調用成功,函數的返回為非0,否則返回0,如果調用失敗,可以調用Win32函數GetLastError(),確認出錯的原因。

主要注意:如果重復上傳文件,會把伺服器上的文件覆蓋掉,且可以上傳特定文件夾下,如hello/hello.zip

Remove()函數

BOOL Remove( LPCTSTR pstrFileName );

如果調用成功,函數的返回為非0,否則返回0,如果調用失敗,可以調用Win32函數GetLastError(),確認出錯的原因。

pstrFileName

需要刪除的伺服器上的文件名

Call this member function to delete the specified file from the connected server.

The pstrFileName parameter can be either a partially qualified filename relative to the current directory or fully qualified. A backslash (\) or forward slash (/) can be used as the directory separator for either name. The Remove function translates the directory name separators to the appropriate characters before they are used.

注意:Remove如果刪除的文件不存在,則返回FALSE,支持相對路徑

2. 測試實例
2.1 例一 連接到FTP站點

建立連接到ftp.microsoft.com的程序,它是一個單文檔程序。並且連接由視圖類的構造函數完成。

建立單文檔程序ftp

在ftpview.h中加入包含#include < afxinet.h >

在ftpview.h中添加如下的成員變數

public:

CInternetSession *m_pInetsession;

CFtpConnection *m_pFtpConnection;

在ftpview.cpp中的ftpview構造函數中加入下面的代碼

CFtpView::CFtpView()

{

m_pInetSession=new CInternetsession

(AfxGetAppName(),1,

PRE_CONFIG_INTERNET_ACCESS);

try

{

m_pFtpConnection=m_pInetsession->

GetFtpConnection("FTP.MICROSOFT.COM");

}

catch(CInternetException *pEx)

{

TCHAR szError[1024];

if(pEx->GetErrorMessage(szError,1024))

AfxMessageBox(szError);

else

AfxMessageBox("There was an exception");

pEx->Delete();

m_pFtpConnection=NULL;

}

}

在ftpview.cpp中的ftpview析構函數中加入下面的代碼

CFtpView::~CFtpView()

{

if(m_pFtpConnection!=NULL)

{

m_pFtpConnection->Close();

delete m_pFtpConnection;

}

delete m_pInetsession;

}

編譯並且執行程序,如果連接出現問題,將會在一個消息框中報告出錯消息。

2.2 例二 發送文件到FTP文件伺服器

創建一個發送文件到FTP文件伺服器的程序

建立單文檔程序ftpfw, 在ftpfwview.h中加入包含 #include < afxinet.h >

在ftpfwview.h中添加如下的成員變數

public:

bool m_bConnectionAttempted;

int m_nFileStatus;

在ftpview.cpp中的ftpview構造函數中加入下面的代碼

CFtpfwView::CFtpfwView()

{

m_bConnectionAttempted=false;

}

使用ClassWizard加入新的類CFtpThread,該類派生於CWinThread 在ftpthread.h中加入如下變數

public:

static UINT PutFile(LPVOID Status);

添加新類成員函數代碼

UINT CFtpThread::PutFile(LPVOID Status)

{

int *pnFileStatus;

CInternetSession *pInetsession;

CFtpConnection *pFtpConnection=NULL;

pnFileStatus=(int *)Status;

*pnFileStatus=0;

pInetsession=new CInternetsession(AfxGetAppName(),1,

PRE_CONFIG_INTERNET_ACCESS);

try

{

pFtpConnection=pInetsession->

GetFtpConnection("192.34.45.0");

}

catch(CInternetException *pEx)

{

pEx->Delete();

pFtpConnection=NULL;

*pnFileStatus=-1;

goto BallOut;

}

*pnFileStatus =1;

pFtpConnection->Remove("test.txt");

if(!pFtpConnection->PutFile

("test.txt","test.txt"))

*pnFileStatus=-2;

else

*pnFileStatus=2;

BallOut:

if(pFtpConnection!=NULL)

{

pFtpConnection->Close();

delete pFtpConnection;

}

delete pInetsession;

AfxEndThread(0);

return false;

}

編輯ftpfwview.cpp中的OnDraw()函數

void CFtpfwView::OnDraw(CDC* pDC)

{

CFtpfwDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if(!m_bConnectAttempted)

{

m_bConnectAttempted=TRUE;

AfxBeginThread((AFX_THREADPROC)

CFtpThread::PutFile,&m_nFileStatus);

}

}

編譯並且執行程序,在連接和傳輸的過程中,應用程序仍然可以作自己的工作,這是因為傳輸的過程發生在線程中。

3.封裝FTPTransfer類
3.1 頭文件
///////////////////////////////////////////////////////////

// FTPTransfer.h

// interface of the FTPTransfer mole

// Created on: 24-July-2010

// Original author: Andrew Zhang

///////////////////////////////////////////////////////////

#ifndef _FTPTRANSFER_H_

#define _FTPTRANSFER_H_

#include <afxinet.h> // for ftp api functions

class FTPTransfer

{

public:

FTPTransfer();

~FTPTransfer();

BOOL Login();

void Logout();

BOOL CreateRemoteDir(LPCTSTR pstrDirName);

BOOL DeleteRemoteDir(LPCTSTR pstrDirName);

BOOL Upload(LPCTSTR pstrLocalFile, LPCTSTR pstrRemoteFile);

BOOL Download(LPCTSTR pstrRemoteFile, LPCTSTR pstrLocalFile);

BOOL DeleteRemoteFile(LPCTSTR pstrFileName);

BOOL UploadAll();

CString GetLastError();

protected:

private:

void Config();

CString m_csServer;

CString m_csUsername;

CString m_csPassword;

unsigned int m_nPort;

CInternetSession *m_pSession;

CFtpConnection *m_pConn;

static CString lastError;

public:

// 需要傳輸的文件夾

CStringArray m_astrAllDirName;

CString m_csLocalDir; // 本地圖像所在路徑,需要外界賦值。

};

#endif

3.2 設置配置項
可以配置伺服器的IP,Port,用戶名,密碼等

配置項樣例:

[FTPTransfer]

FTPServer = 192.168.29.253

Username = andrew

Password = zhang

Port = 21

;Ftp伺服器的IP 賬戶 密碼

3.3 使用說明
FTPTransfer transfer;

transfer.m_csLocalDir = url + strImgNo.c_str();

transfer.m_astrAllDirName.Add(csImgNo);

try

{

if (!transfer.UploadAll())

{

CString strlog(_T("[threadOperationTransfer]: "));

ServiceLog.write_log("[threadOperationTransfer]: ERROR! Upload error.");

CString csError = transfer.GetLastError();

ServiceLog.write_log((LPCWSTR)(strlog+ csError));

return -1; // FTP Error;

}

}

catch (...)

{

CString strlog(_T("[threadOperationTransfer]: "));

ServiceLog.write_log("[threadOperationTransfer]: ERROR! upload except:");

CString csError = transfer.GetLastError();

ServiceLog.write_log((LPCWSTR)(strlog+ csError));

return -1;

}

三.總結
通過以上的程序我們可以明白FTP的工作原理,因為基於應用,解釋的還比較淺顯。另外上傳和下載需要比較久的時間,可以考慮設計多線程的方式來實現,這樣不至於程序阻塞。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/loadstar_kun/archive/2010/08/06/5790288.aspx

Ⅳ 有幾個java網路編程基礎的選擇題 哪位大神給下答案

、Applet為一種特殊的Panel,它可作為Java Applet程序的最外層容器。 ( )
2、Java的源碼中定義多少個類,編譯後結果就生成多少個以.class為後綴的位元組碼文 ( )
3、Java程序中,使用關鍵字new創建新的類對象,使用關鍵字free回收無用的類對象。 ( )
4、Java有垃圾回收機制,可在指定的時間使用內存回收程序釋放內存對象。 ( )
5、構造函數用於創建類的實例對象,返回類型為void,構造函數名應與類名相同。 ( )
6、在異常處理中,假設try中的代碼可能產生多種異常則可以對應多個catch語句,若catch中的參數類型有父子關系,此時應該將子類放在前面,父類放在後面。 ( )
7、含有abstract方法的類是抽象類,而抽象類中可以沒有abstract方法。 ( )
8、Java的屏幕坐標以像素為單位,容器的左下角被確定為坐標的起點。 ( )
9、靜態初始化器是在其所屬的類載入內存時由系統自動調用執行。 ( )
10、在Java中可使用賦值號( )對對象賦值,相當於生成了一個各屬性與賦值對象相同的新對象。 ( )
11、MVC是Model-View-Controller的簡寫。"View" 是應用的表示面(由JSP頁面產生)。( )
12、MVC是Model-View-Controller的簡寫。"Controller" 是提供應用的處理過程式控制制(一般是一個Servlet),通過這種設計模型控制應用邏輯。( )
13、Tomcat是支持JSP引擎的一種伺服器軟體,可以通過server.xml文件修改伺服器的配置信息。( )
14、通過Request.getParameterValues()可以獲得某個參數的多個值( )
15、運行JSP需要有JSP引擎,Tomcat是支持JSP的Web伺服器的一種。( )
16、Jsp使用的是Java腳本代碼,可跨平台運行,運行開銷小,具有速度快,可擴展性好及支持分布式處理等特點。 ( )
17、在定義了Bean的屬性後,可不創建屬性方法。( )
18、if語句是Java的條件分支語句,它控製程序以兩條路徑執行。( )
19、包是類的容器,用於保證類名空間的一致性。( )
20、JSP中不能使用HTML中的「<!-- -->」注釋方式,只能使用JSP的「<!-- -->」的注釋方式。
答案:僅供參考
T T F T T T T F T F T T T F F F T T T F

21.Java application中的主類必須包含方法main,以下哪項是main方法的正確參數?( )
A、 String args B、String ar[] C、Char arg D、StringBuffer args[]

22.以下對繼承的正確描述是( )。
A、在Java中類只允許單一繼承
B、在Java中一個類只能實現一個介面
C、在Java中一個類不能同時繼承一個類和實現一個介面
D、在Java中介面只允許單一繼承

23.paint()方法中的參數可使用哪種類型? ( )
A、Graphics B、Graphics2D C、String D、Color

24.以下不屬於Java基本數據類型的是( )
A、int B、Boolean C、float D、char

25.以下哪項可能包含菜單條( )。
A、Panel B、Frame C、Applet D、Dialog

26.應使用哪種修飾符定義一個類域或類方法?( )
A、static B、package C、private D、public

27.在瀏覽器中執行applet 程序,以下選項中的哪個方法將被最先執行( )。
A、init() B、start() C、destroy() D、stop()

28.參考以下代碼,關於該程序以下哪個說法是正確的?( )
public class Person{
static int arr[] = new int[3];
public static void main(String a[])
{
System.out.println(arr[0]);}
}
A、編譯時將產生錯誤 B、編譯時正確,運行時將產生錯誤
C、輸出零 D、輸出空

29.下列語句中,哪些關於Java內存回收的說明是正確的? ( )
A、程序員必須創建一個線程來釋放內存
B、內存回收程序負責釋放無用內存
C、內存回收程序允許程序員直接釋放內存
D、內存回收程序可以在指定的時間釋放內存對象

30.以下關鍵字中,可以用來對對象加互斥鎖的是?( )
A、transient B、synchronized C、 serialize D、static

31.以下代碼段執行後的輸出結果為( )
int x=-3; int y=-10;
System.out.println(y%x);
A、 -1 B、2 C、1 D、3

32.有以下程序片段,下列哪個選項不能插入到行1。( )
1.
2.public class Interesting{
3.//do sth
4. }
A、import java.awt.*; B、package mypackage;
C、class OtherClass{ } D、public class MyClass{ }

33.假設有如下兩個賦值語句:
a = Integer.parseInt(「5」);
b = Integer.valueOf(「5」).intValue();
下述說法正確的是( )。
A、a是整數類型變數,b是整數類對象。 B、a是整數類對象,b是整數類型變數。
C、a和b都是整數類對象並且值相等。 D、a和b都是整數類型變數並且值相等。

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:639
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:368
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:84
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:310
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:793
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:344
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:212
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:812
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:366
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:592