当前位置:首页 » 文件传输 » socket编写ftp协议
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

socket编写ftp协议

发布时间: 2022-05-24 12:39:16

⑴ ftp协议和TCP协议,什么关系如何理解socket

FTP,TCP是跑在网络上的协议,就好像MP3,WMA格式的音乐一样。FTP主要用于文件的传输,TCP可以跑HTML,图像,超链SOCKET是将TCP,UDP协议的功能打包使用,一般给开发人员用的。

⑵ 使用socket编写ftp,一台机器又作服务器又作客户端,为什么客户端能连上服务器,而服务器连不上客户端呢

你给出的代码不是关键的代码呀,把关于bind,accept,conncet三个函数相关的东西放上来看下呀。
一般而言:服务器连不上客户端是因为客户端没有提供服务。(UDP)
对于TCP而言,相信没有连接不上的问题,只是主动与被动的问题,因为TCP协议多数是用在(C/S)模式。如果不不明白请将关键代码示出。

⑶ 用SOCKET实现FTP

我知道,M我,我告诉你.

⑷ 我在用C++的SOCKET写一个简单的FTP服务器,需要把本地目录发给客户端,请问当用户发送"LIST"命令时,怎么

看你的服务器是基于什么系统了。如果是unix/linux系统,你可以用系统调用来读取当前目录下的文件列表(包括目录,目录也是文件),通常这个步骤只需要一个循环。通过这个步骤其实你就可以到了当前目录下的文件名,然后你只需把这些文件名发送给客户端就可以了。当然,这是最简单的方式。你也是可以根据自己的喜好,把文件的访问权限,拥有者等信息,按照一定的格式发给客户端。

对于windows系统,处理方式与此类似,只不过把读取当前目录下的文件列表的系统调用换成windows相应的调用即可。

⑸ socket编程:FTP协议客户端 CAsynSocket类的问题

我之前写过一个示例的FTP服务器。FTP协议和HTTP协议一样,都是属于一问一答的,当你的命令连接与FTP服务器连接后,就要等待响应服务器的欢迎信息 220, 然后再发送请求进行登陆,发送完后不要再发送其他命令了,一定要等刚刚的请求响应完成。所以你不要一次性把4个命令全部发送过去。一定要保证一问一答。

⑹ 用socket写FTP客户端问题

是的。
需要有两个套接字,一个用于命令(cmdSocket),一个用于数据(dataSocket)
cmdSocket与ftp服务器21端口(如果ftp服务器没做特殊设置的话)连接,dataSocket因PASV和PORT模式不同,而有所差别。
PASV模式:
1)通过命令cmdSocket套接字发送PASV
2)server端会返回ip地址和专门的数据传输端口号
3)在命令套接字cmdSocket上发送LIST命令
4)本地建立dataSocket连接server提供的数据传输端口号(此步中,本地作为客户端)
5)server端通过cmdSocket返回150 开头的响应(需要读取cmdSocket)
6)本地通过dataSocket接收数据,即通过dataSocket的inputStream读取dataSocket中的数据
7)传输完毕(read返回-1),cmdSocket会返回226 开头的响应,关闭连接即可
PORT模式:
1)在本地启动某个端口的监听(本地作为服务端,使用ServerSocket)
2)通过命令cmdSocket套接字发送PORT,PORT命令后加参数:本地ip+刚启动监听的端口
3)server端响应200
4)在cmdSocket上发送LIST命令
5)调用ServerSocket.accept()获得数据套接字dataSocket(ftp server作为客户连接本地的端口)
6)server端通过cmdSocket返回150 开头的响应(需要读取cmdSocket)
7)本地通过dataSocket接收数据,即通过dataSocket的inputStream读取dataSocket中的数据
8)传输完毕(read返回-1),cmdSocket会返回226 开头的响应,关闭连接即可

⑺ 用linux socket写ftp遇到的问题(程序最后一行)

char sendbuff[]="USER sail\r\n";

⑻ java用socket编写ftp的客户端程序。大概要什么步骤(登录,显示文件,下载上传就行)

登陆。需要服务器
显示文件, 使用IO获取服务器某位置的文件就是了
下载上传,用流传输。。

⑼ C# socket ftp

要用ftp协议来实现,下面是对文件的操作,里面有获取文件列表的方法
#region 文件操作
/// <summary>
/// 获得文件列表
/// </summary>
/// <param name= "strMask "> 文件名的匹配字符串 </param>
/// <returns> </returns>
public string[] Dir(string strMask)
{
// 建立链接
if(!bConnected)
{
Connect();
}

//建立进行数据连接的socket
Socket socketData = CreateDataSocket();

//传送命令
SendCommand( "NLST " + strMask);

//分析应答代码
if(!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
{
throw new IOException(strReply.Substring(4));
}

//获得结果
strMsg = " ";
while(true)
{
int iBytes = socketData.Receive(buffer, buffer.Length, 0);
strMsg += ASCII.GetString(buffer, 0, iBytes);
if(iBytes < buffer.Length)
{
break;
}
}
char[] seperator = { '\n '};
string[] strsFileList = strMsg.Split(seperator);
socketData.Close();//数据socket关闭时也会有返回码
if(iReplyCode != 226)
{
ReadReply();
if(iReplyCode != 226)
{
throw new IOException(strReply.Substring(4));
}
}
return strsFileList;
}

/// <summary>
/// 获取文件大小
/// </summary>
/// <param name= "strFileName "> 文件名 </param>
/// <returns> 文件大小 </returns>
private long GetFileSize(string strFileName)
{
if(!bConnected)
{
Connect();
}
SendCommand( "SIZE " + Path.GetFileName(strFileName));
long lSize=0;
if(iReplyCode == 213)
{
lSize = Int64.Parse(strReply.Substring(4));
}
else
{
throw new IOException(strReply.Substring(4));
}
return lSize;
}

/// <summary>
/// 删除
/// </summary>
/// <param name= "strFileName "> 待删除文件名 </param>
public void Delete(string strFileName)
{
if(!bConnected)
{
Connect();
}
SendCommand( "DELE "+strFileName);
if(iReplyCode != 250)
{
throw new IOException(strReply.Substring(4));
}
}

/// <summary>
/// 重命名(如果新文件名与已有文件重名,将覆盖已有文件)
/// </summary>
/// <param name= "strOldFileName "> 旧文件名 </param>
/// <param name= "strNewFileName "> 新文件名 </param>
public void Rename(string strOldFileName,string strNewFileName)
{
if(!bConnected)
{
Connect();
}
SendCommand( "RNFR "+strOldFileName);
if(iReplyCode != 350)
{
throw new IOException(strReply.Substring(4));
}
// 如果新文件名与原有文件重名,将覆盖原有文件
SendCommand( "RNTO "+strNewFileName);
if(iReplyCode != 250)
{
throw new IOException(strReply.Substring(4));
}
}
#endregion

⑽ 有 FTP 协议可用,也可自己直接用 Socket API (MFC有CSocket类) 实现,谢谢你!

Win API 还有一个传输文件的函数 TransmitFile,它结合Socket实现。你搜资料弄明白Socket 相关原理后就容易实现文件(数据)传输了。