socket(2)

server.c负责接受客户端连接,并且把客户端发送过来的文件接受

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

int main(int argc,char **argv)
{
        int sockfd,bindfd,listenfd,acceptfd,ntopfd,recvfd;
        socklen_t len;
        char addr_ptr[100];
        char buf[100];
        struct sockaddr_in seraddr,cliaddr;        
        sockfd=socket(AF_INET,SOCK_STREAM,0);
        if(sockfd==-1)
        {
                perror("socket\n");
        }
        else
        printf("socket create success!\n");
        bzero(&seraddr,sizeof(struct sockaddr_in));
        seraddr.sin_family=AF_INET;
        seraddr.sin_addr.s_addr=htonl(INADDR_ANY);
        seraddr.sin_port=htons(45000);
        bindfd=bind(sockfd,(struct sockaddr *)&seraddr,sizeof(struct sockaddr));
        if(bindfd==-1)
        {
                perror("bind error!\n");
                return 1;

        }
        else
        printf("bind success!\n");
        listenfd=listen(sockfd,10);
        if(listenfd==-1)
        {
                perror("error listen !\n");
        }
        else
        printf("listen success!\n");
        while(1)
        {
                int port,pid,res;
                len=sizeof(struct sockaddr_in);
                acceptfd=accept(sockfd,(struct sockaddr *)&cliaddr,&len);
                if(acceptfd==-1)
                {
                        perror("accept error!\n");
                }        
                else
                {
                        inet_ntop(AF_INET,&cliaddr.sin_addr,addr_ptr,sizeof(addr_ptr));
                        port=ntohs(cliaddr.sin_port);
                        if((pid=fork())<0)
                        {
                                perror("fork error!\n");
                        }
                        if(pid==0)
                        {
                                close(listenfd);
                                memset(buf,0x00,sizeof(buf));
                                printf("ip : %s port : %d \n",addr_ptr,port);
//                                res=recv(acceptfd,buf,10,0);
                                while((res=recv(acceptfd,buf,10,0)))
                                {
                                        printf("%s",buf);
                                        memset(buf,0x00,sizeof(buf));
//                                        res=recv(acceptfd,buf,10,0);
                                }
//                                printf("before send\n");
//                                char buff[100];
//                                memset(buff,0x00,sizeof(buff));
//                                strcpy(buff,"server received !");
//                                send(acceptfd,buff,sizeof(buff),0);
//                                printf("after send\n");
                        }
                        
                }
                close(acceptfd);
        }
        close(sockfd);
        return 0;
}


客户端负责发送一个文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

int main(int argc,char **argv)
{
        int sockfd,bindfd,listenfd,acceptfd,ntopfd,recvfd;
        socklen_t len;
        char addr_ptr[100];
        char buf[100];
        struct sockaddr_in seraddr,cliaddr;        
        sockfd=socket(AF_INET,SOCK_STREAM,0);
        if(sockfd==-1)
        {
                perror("socket\n");
        }
        else
        printf("socket create success!\n");
        bzero(&seraddr,sizeof(struct sockaddr_in));
        seraddr.sin_family=AF_INET;
        seraddr.sin_addr.s_addr=htonl(INADDR_ANY);
        seraddr.sin_port=htons(45000);
        bindfd=bind(sockfd,(struct sockaddr *)&seraddr,sizeof(struct sockaddr));
        if(bindfd==-1)
        {
                perror("bind error!\n");
                return 1;

        }
        else
        printf("bind success!\n");
        listenfd=listen(sockfd,10);
        if(listenfd==-1)
        {
                perror("error listen !\n");
        }
        else
        printf("listen success!\n");
        while(1)
        {
                int port,pid,res;
                len=sizeof(struct sockaddr_in);
                acceptfd=accept(sockfd,(struct sockaddr *)&cliaddr,&len);
                if(acceptfd==-1)
                {
                        perror("accept error!\n");
                }        
                else
                {
                        inet_ntop(AF_INET,&cliaddr.sin_addr,addr_ptr,sizeof(addr_ptr));
                        port=ntohs(cliaddr.sin_port);
                        if((pid=fork())<0)
                        {
                                perror("fork error!\n");
                        }
                        if(pid==0)
                        {
                                close(listenfd);
                                memset(buf,0x00,sizeof(buf));
                                printf("ip : %s port : %d \n",addr_ptr,port);
//                                res=recv(acceptfd,buf,10,0);
                                while((res=recv(acceptfd,buf,10,0)))
                                {
                                        printf("%s",buf);
                                        memset(buf,0x00,sizeof(buf));
//                                        res=recv(acceptfd,buf,10,0);
                                }
//                                printf("before send\n");
//                                char buff[100];
//                                memset(buff,0x00,sizeof(buff));
//                                strcpy(buff,"server received !");
//                                send(acceptfd,buff,sizeof(buff),0);
//                                printf("after send\n");
                        }
                        
                }
                close(acceptfd);
        }
        close(sockfd);
        return 0;
}

編譯: gcc client.c -o client

运行:./server    ./client filename

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值