标题:[求助]急!网络编程ftp
只看楼主
apan68
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-16
 问题点数:0 回复次数:2 
[求助]急!网络编程ftp

这是我第一次编写网络程序。太多的疑问,谢谢能帮我解决!!
题目:编程、设计实现一个Client/Server模式的简化的文件传输服务FTP系统:请利用VC提供的3种Socket编程机制之一(Windows Sockets API、CAsyncSocket类、WinSock控件)实现简单的TCP通讯,使服务器端可在后台监听来自某个客户发来的建立TCP连接请求并响应之,而客户端程序运行后应能实现下述文件传输命令功能:
get 取远方服务器的一个文件
put 传给远方服务器一个文件
dir 列出远方服务器当前目录中的内容
cd 改变远方服务器的当前目录
? 显示你提供的客户端命令
quit 退出程序

我的思路是:先建立tcp连接,然后进行数据传输,从而实现简单的ftp.大虾们给个建议说行吗?
下面是我的未完成的代码,在连接时出现问题.麻烦大家给予帮助.我还有两天就要交工了,可是.......
能帮帮我的,谢谢你们了

搜索更多相关主题的帖子: 网络 ftp 
2006-02-16 01:23
apan68
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-16
得分:0 

//客户端 client.cpp
#include<iostream.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<winsock2.h>
#include<windows.h>

class Client{
private:
int port;
public:
Client(){port=5170;}
~Client(){};
int f();
};
int Client::f(){
SOCKET sk;
sockaddr_in tcpaddr;
int err;int p;int nResult;
WORD wVer;
WSADATA wsaData;
wVer=MAKEWORD(1,1);
err=WSAStartup(wVer,&wsaData);//判断Windows sockets dll版本
if(err!=0)return(0);
sk=socket(AF_INET,SOCK_STREAM,0);//建立套接字
if(sk==SOCKET_ERROR){
printf("error\n"); //错误处理
return 0; }
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(port);
tcpaddr.sin_addr.s_addr=inet_addr("192.168.1.99");
nResult=connect(sk,(sockaddr*)&tcpaddr,sizeof(tcpaddr));
if(nResult==SOCKET_ERROR){
printf("connect() failed: %d\n",WSAGetLastError());//错误处理
return 0;
closesocket(sk);
}
printf("succeful connet");

}
void main(){
Client c;
c.f();
}

[此贴子已经被作者于2006-2-16 1:25:43编辑过]

2006-02-16 01:24
apan68
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-16
得分:0 

//服务端 server.cpp
#include<iostream.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<winsock2.h>
#include<windows.h>

class CServer
{
private:
int port;
public:
CServer();
virtual ~CServer();
f();
};
CServer::CServer(){
port=5150;
}
CServer::~CServer(){}
CServer::f(){
int err;int p;
WORD wVer;
WSADATA wsaData;
wVer=MAKEWORD(1,1);
err=WSAStartup(wVer,&wsaData);//判断Windows sockets dll版本
if(err!=0)
return(0);
SOCKET sListen,sAccept;
struct sockaddr_in tcpaddr;
int port=5150;
// 取得本地地址
sListen=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
if(sListen==INVALID_SOCKET)
{printf("错误:Failed to get a socket%d\n",WSAGetLastError());
WSACleanup();
return 0;
}
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(port);
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sListen,(PSOCKADDR)&tcpaddr,sizeof(tcpaddr))==SOCKET_ERROR)
{printf("错误:bind() failed with error %d\n", WSAGetLastError());
return 0;
}
//服务端监听
if (listen(sListen, SOMAXCONN))
{printf("错误:listen() failed with error %d\n", WSAGetLastError());
return 0;
}
printf("Ftpserver已经启动 \n");
printf("Ftpserver开始侦听 \n");
//接收客户端连接
if ((sAccept = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0,
WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)
{
printf("错误:Failed to get a socket %d\n", WSAGetLastError());
return 0;
}
}
void main(){
CServer s;
s.f();
}


2006-02-16 01:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-45716-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.147152 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved