找回密码
 注册
查看: 2333|回复: 42

求助 急!要一份LINUX网络编程的原代码!

[复制链接]
发表于 2003-7-3 17:43:00 | 显示全部楼层 |阅读模式
小弟急需一份源代码!LINUX 下网络编程的!而且要可以传送文件的!
希望各位高手能给予帮助!
发表于 2003-7-3 20:54:42 | 显示全部楼层
ftp source code.
回复

使用道具 举报

发表于 2003-7-4 11:43:21 | 显示全部楼层
你的具体要求是能传送文件?
那等明天吧
我给你写一个简单的了
回复

使用道具 举报

发表于 2003-7-4 19:25:46 | 显示全部楼层
我也想看看阿,贴出来吧
回复

使用道具 举报

 楼主| 发表于 2003-7-4 20:50:25 | 显示全部楼层
三楼 兄弟多谢了   我就是在这里被卡住了!我很急用!能不能快一点 我的QQ是64438493
请加我!
回复

使用道具 举报

发表于 2003-7-5 00:19:24 | 显示全部楼层
我也有同样问题,如有消息大家可否分享一下!多谢!
QQ:9609923
回复

使用道具 举报

发表于 2003-7-6 10:07:42 | 显示全部楼层
三楼兄弟是否双休日休息?
大家在等你消息耶!
回复

使用道具 举报

发表于 2003-7-6 10:08:19 | 显示全部楼层
三楼兄弟是否双休日休息?
大家在等你消息耶!
回复

使用道具 举报

发表于 2003-7-6 14:55:30 | 显示全部楼层
正在修改一点bug
不好意思
而且最近要完成一个暑期社会调查任务
要耽误点时间
回复

使用道具 举报

发表于 2003-7-6 15:04:14 | 显示全部楼层
哦!原来如此!那你多费心了!
我们对你有信心!
希望早日能看到你杰作!
回复

使用道具 举报

 楼主| 发表于 2003-7-6 22:15:16 | 显示全部楼层
3楼的兄弟呀!我也是急用呀!你能快点吗 !小弟感激不禁!
回复

使用道具 举报

发表于 2003-7-6 22:56:23 | 显示全部楼层
是呀!午夜心铃这么急!3楼的兄弟看来真的要抓紧的哟!
回复

使用道具 举报

发表于 2003-7-6 23:20:50 | 显示全部楼层
真是对不起的阿
我赶快贴出一个初稿的了
简单的不用子进程或者多线程
服务端只为一个连接服务,客户端只传送一个文本文件
大家可以修改改进
服务端(接收端)
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<netdb.h>
#include<errno.h>
#include<unistd.h>
#define MYPORT 12000
#define BACKLOG 1
#define MAXSIZE 4096

int b_link(int port)//函数说明:创建一个套接口
{
        int sockfd,ret,len,con_fd;
        struct sockaddr_in ser_addr;
        int nsize;
        sockfd=socket(AF_INET,SOCK_STREAM,0);//建立一个ip/tcp套接口
        if(sockfd&lt;0)
        {
                printf("error in building a socket\n\a");
                return -1;
        }
        ser_addr.sin_family=AF_INET;
        ser_addr.sin_port=htons(port);
        ser_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        bzero(&amp;(ser_addr.sin_zero),;
        ret=bind(sockfd,(struct sockaddr *)&amp;ser_addr,sizeof(struct sockaddr));//端口绑定
        if(ret&lt;0)
        {
                printf("error in binding port\n\a");
                return -1;
        }

        ret=listen(sockfd,1);//端口监听.简单起见,只接受一个请求
        if(ret&lt;0)
        {
                printf("error in listening \n\a");
                return -1;
        }
        return sockfd;
};
int b_access(int sockfd)//接受服务请求,接收文件
{
        int con_fd;
        struct sockaddr_in cli_addr;
        int sin_size;
        sin_size=sizeof(struct sockaddr_in);
        con_fd=accept(sockfd,(struct sockadd*)&amp;cli_addr,&amp;sin_size);//接受请求
        if(con_fd&lt;0)
        {
                printf("error in accepting \n\a");
                close(sockfd);
                return -1;
        }
        printf("client %s connect.......\n",inet_ntoa(*(struct sockaddr_in *)&amp;cli_addr.sin_addr.s_addr));

        char buf[MAXSIZE];
        FILE *File;
        int nsize;
        File=fopen("temp","w");//打开一个文件用来保存传送的文件

        if(File==NULL)
        {
                printf("error in creating conserve file %s \n\a",buf);
                close(sockfd);
                return -1;
        }
        else
                printf("the file is stored in temp.....\n");
        fflush(NULL);
        while((nsize=recv(con_fd,buf,MAXSIZE,0))!=0)//接收文件
                        fwrite(buf,1,nsize,File);
        close(sockfd);//关闭套接口
        return 1;
};
int main()
{//启动测试
        int sockfd;
        sockfd=b_link(MYPORT);
        if(b_access(sockfd)&gt;0)
                printf("file accept end \n\a");
        else
                printf("file accept failed \n\a");
        return 1;
}
*********************************************************************************
客户端:传送文件
#include&lt;sys/types.h&gt;
#include&lt;sys/socket.h&gt;
#include&lt;netdb.h&gt;
#include&lt;string.h&gt;
#include<unistd.h>
#include&lt;stdio.h&gt;
#define MAXSIZE 8096
#define MYPORT 12000
int b_connect(char *hostname)//与主机建立连接,参数hostname为主机名或ip
{
        int sockfd,ret,len;
        struct sockaddr_in ser_addr;
        char *myname;
        struct hostent *sh;
        struct in_addr *addrs;
       
        if((sh=gethostbyname(hostname))==NULL)//将主机名转换成数字地址
        {
                if((sh=gethostbyaddr(hostname,4,AF_INET))==NULL)
                {
                        printf("the host name couldn't be expressed \n\a");
                        return -1;
                }

        }
        printf("connecting to %s ......\n",inet_ntoa(*(struct sockaddr *)sh-&gt;h_addr_list[0]));
        addrs=(struct in_addr *)sh-&gt;h_addr_list[0];
        sockfd=socket(AF_INET,SOCK_STREAM,0);//创建一个套接口
        if(sockfd&lt;0)
        {
                printf("error in building socket \n\a");
                return -1;
        }
        ser_addr.sin_family=AF_INET;//协议ip/tcp
        ser_addr.sin_port=htons(MYPORT);主机监听端口,转换成网络数字形式
        memcpy(&amp;(ser_addr.sin_addr.s_addr),addrs,sizeof(struct in_addr));//主机ip地址,网络数字形式
        bzero(&amp;(ser_addr.sin_zero),;
        ret=connect(sockfd,(struct sockaddr *)&amp;ser_addr,sizeof(struct sockaddr));//与主机建立连接
        if(ret&lt;0)
        {
                printf("error in conneting \n\a");
                return -1;
        }
        return sockfd;
};
int f_send(int sockfd,char *fs)//文件传送 参数:sockfd 已经建立的套接口,fs传送的文件名(包括路径)
{
        FILE *File;
        int nsize;
        int i=0;
        char temp[MAXSIZE];
           char buf[MAXSIZE];
        File=fopen(fs,"r");//打开要传送的文件
        if(File==NULL)
        {
                printf("file: %s open failed!.....\n",fs);
                return -1;
        }

        while((nsize=fread(buf,1,MAXSIZE,File))&gt;0)//读文件
        {
                send(sockfd,buf,nsize,0);//传送文件
        }
        if(feof(File)!=0)
                printf("file transfers succussly!\n%d",strlen(buf));
        else
                printf("error in reading file \n\a");
        fclose(File);
        close(sockfd);
        return 1;
};
int main(void)//测试
{
        int sockfd;
        char hostname[100];
        char file[100];
        printf("please input the hostname(ip) you want to connect:");
            fflush(NULL);
        gets(hostname);
        sockfd=b_connect(hostname);
        if(sockfd&lt;=0)
                return -1;
        printf("connect success!\nplease input the filename you want to transfer:");
        fflush(NULL);
        gets(file);
        return f_send(sockfd,file);
}
................................................................................................
这只能算是最简单的socket编程文件传送,没有判断出错等
当然大家可以改进
主机端的基本形式是:
socket 建立套接字
blind 绑定端口
listen 监听端口
accept 接受请求
recv 接受数据
close 关闭套接字

服务端的基本形式:
socket 建立套接字
connect 与主机端建立连接
send 传送数据
close 关闭套接字

等最近一段时间把社会调查完成了,再修改一下
要是有谁改进的了,就贴一下的了,大家共同探讨了
回复

使用道具 举报

 楼主| 发表于 2003-7-8 08:33:04 | 显示全部楼层
谢谢三楼的兄弟了!我终于把程序搞出来了
回复

使用道具 举报

发表于 2003-7-9 00:41:50 | 显示全部楼层
你的程序怎么样的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-8-11 12:08 , Processed in 0.057585 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表