网络编程题目
Ⅰ 设整形变量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都是整数类型变量并且值相等。