[ftp服务器]编写ftp服务器遇到问题,请教大家一下。谢谢。

Thorwein 2008-11-24 07:56:21
先贴代码



void start(void)
{
int listenfd;
int CtlConnectFd;
struct sockaddr cliaddr;
socklen_t clilen=sizeof(cliaddr);
listenfd = Tcp_service(INADDR_ANY,5555); // 5555 端口
// 测试阶段服务器监听 用 5555 端口

Tcp_listen(listenfd,MAX_CONNECT_COUNT);
while (1)
{
CtlConnectFd = Tcp_accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);
if (fork()==0)
{ // 启动的时候,(控制链接)马上链接 CtlConnect
// 子进程
close(listenfd);
// to do 子进程的处理工作
write_loop(CtlConnectFd,"220 test",strlen("220 test"));
// 疑问在这里
// 建立链接了,我想马上服务器就做出应答,在客户端打出上面这些信息
// 可是一直打不出来。想想这个问题没解决后面很难做下去,接下去的命令实现都是要这样测试的。



// 客户端信信息

//连接到 192.168.0.188, 端口 5555 (#1)
// 已连接. 正等待响应.

它就一直这样等着。为什么等不到服务器的响应呢
close(CtlConnectFd);
exit(0); // 子进程退出
}
close(CtlConnectFd);
}
}



// 相关函数的封装
C/C++ code

int Tcp_service(char * ip,int port) // 创建服务器监听套接字,并绑定ip && port
{
int listenfd;

listenfd = socket(AF_INET,SOCK_STREAM,0);
if (listenfd == -1)
{
// 创建失败
return -1;
}
// 创建成功

struct sockaddr_in servaddr;
socklen_t len;

memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port);
//servaddr.sin_addr.s_addr = htonl("192.168.0.188");
servaddr.sin_addr.s_addr = inet_addr("192.168.0.188");
len = sizeof(servaddr);
Tcp_bind(listenfd,(struct sockaddr *)&servaddr,len);
return listenfd;
}


C/C++ code

// 服务器套接口 绑定套接口地址
int Tcp_bind(int sockfd,struct sockaddr * my_addr,socklen_t addrlen)// 绑定
{
if (bind(sockfd,my_addr,addrlen) != 0 )
{
perror("Because:call bind function flase . Startup service is failed\n");
exit(EXIT_FAILURE);
}
return 0;
}

// 监听函数
int Tcp_listen(int sockfd,int backflog) // 监听函数
{
if (listen(sockfd,backflog) !=0 )
{
perror("Because:call listen function flase. Starup service is failed\n");
exit(EXIT_FAILURE);
}
return 0;
}

// 接受函数
int Tcp_accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen) // 接收函数
{
int clientfd;
clientfd = accept(sockfd,addr,addrlen);
if (clientfd == -1 )
{
perror("Because: call accept function flase . Starup service is failed\n");
exit(EXIT_FAILURE);
}
return clientfd;
}


...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhyttppd 2008-11-24
  • 打赏
  • 举报
回复
up,一头雾水。
就呆在云上 2008-11-24
  • 打赏
  • 举报
回复
ftp没有弄过的
不说
帮顶一下呵呵
Thorwein 2008-11-24
  • 打赏
  • 举报
回复

write_loop(CtlConnectFd,"220 test",strlen("220 test"));
// 如果我用自己封装的函数代替 上面的write的函数
// 客户端信息是

//连接到 192.168.0.188, 端口 5555 (#1)
//已连接. 正等待响应.
//从服务器断开.
//连接尝试失败.
//连接到 192.168.0.188, 端口 5555 (#2)
//已连接. 正等待响应.
//
// 。。。。。。。。


69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧