Chinaunix首页 | 论坛 | 博客
  • 博客访问: 234649
  • 博文数量: 48
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 548
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-28 19:18
文章分类

全部博文(48)

文章存档

2010年(6)

2009年(6)

2008年(36)

我的朋友

分类: LINUX

2008-12-23 15:36:54


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define MAX_SIZE 1500//*40
#define SERV_PORT 8088
#define test test.dat


void connectUDP(int len,int sockfd,struct sockaddr *pservaddr,socklen_t servlen,long num)
{
                char buf[MAX_SIZE];
//                fd_set wrset;
//                struct timeval tv;
//                int rlen,wlen;
//                int ret;
                int i;
                    /********************************************
                    s:标识一个未连接套接口的描述字。
                      name:欲进行连接的端口名。(自己填充用于SOCKER连接的结构体)
                  namelen:名字长度。
                    ********************************************/
                if(connect(sockfd,(struct sockaddr *)pservaddr,servlen) == -1)//建立与一个端的连接
                {
                        perror("connet error");
                        exit(1);
                }
                else
                        printf("connect server ok!\n");

                      memset(buf,'*',len);
                     for(i = 0;i                        {
                            write(sockfd,buf,len);//在文件中写入数据 该数据会在SOCKER中进行传输
                            //usleep(100000);
                        }
                    close(sockfd);
        }


int main(int argc ,char *argv[])
{        
        char *fh;
        struct sysinfo s_info;
        float time1,time2;
        int error1,error2;
        int sockfd;
        //struct stat fsize;
        struct sockaddr_in servaddr;
        error1= sysinfo(&s_info);
        time1 = s_info.uptime;
        int r,len,num;

        if(argc != 4)//判断命令行的参数是否为4个
        {
                printf("useage:udpclient;\n");
                exit(1);
        }
        /******************************************************
        struct sockaddr_in {
        short int sin_family;                      // 指定类型 分别为AF——INET和PF——INET分别是地址和协议类型
        unsigned short int sin_port;       // 端口号
        struct in_addr sin_addr;              // Internet address
        unsigned char sin_zero[8];         // Same size as struct sockaddr
        };
        ******************************************************/
        bzero(&servaddr,sizeof(servaddr));
        servaddr.sin_family= AF_INET;
        servaddr.sin_port = htons(SERV_PORT);//将一个无符号短整形数从网络字节顺序转换为主机字节顺序。
        
        if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr) <= 0)//将点分十进制(IP地址形式)转换成网络字符串网络地址
        {
                printf("[%s]is not a valid IPaddress\n",argv[1]);
                exit(1);
        }
        fh = argv[2];
            /*************************************************
            af - 地址家族(通常使用:AF_INET)
            type - socket的种类
            SOCK_STREAM : 用于TCP协议
            SOCK_DGRAM : 用于UDP协议
            protocol - 所使用的协议
            *************************************************/
        sockfd =socket(AF_INET,SOCK_DGRAM,0);//用于生成socket(soket Descrīptor)
       
        r = fcntl(sockfd, F_GETFL, 0);
        fcntl(sockfd, F_SETFL, r & ~O_NONBLOCK);


          num = atoi(argv[2]); //把字符串转换成整型数 发包数量
          len = atoi(argv[3]);    //把字符串转换成整型数 发包长度
          printf("%d\n",len);
         connectUDP(len,sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr),num);          
        fprintf(stderr,"ServerIP:\t%s\n",argv[1]);       
/*        if(stat(argv[2],&fsize) == -1)
                perror("failed to get fiel statusi\n");
        else       
                fprintf(stderr,"file name:\t%s\nfile size:\t%ldK\n",argv[2],fsize.st_size/1024);
       
*/      error2=sysinfo(&s_info);//获取系统总体的统计信息
       time2 = s_info.uptime;
        printf("tranfice file time =%fs\n",(time2-time1));
           return 0;
}
 
阅读(2003) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~