六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 38|回复: 0

badserver socket

[复制链接]

升级  0.65%

321

主题

321

主题

321

主题

探花

Rank: 6Rank: 6

积分
1013
 楼主| 发表于 2013-1-26 12:28:42 | 显示全部楼层 |阅读模式
代码是《linux高级程序设计》第5章的内容

mqq@208_181:~/fabricehao/test/20120726> cat errtcpserver.c #include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>int main(int args,char * argv){    int i,s,fd,len;    struct sockaddr_in my_addr;    struct sockaddr_in remote_addr;    int sin_size;    char buf[BUFSIZ];    memset(&my_addr,0,sizeof(my_addr));    my_addr.sin_family=AF_INET;    my_addr.sin_addr.s_addr=INADDR_ANY;    unsigned int pp=87654;    my_addr.sin_port=htons(pp);    if((s=socket(AF_INET,SOCK_STREAM,0))<0){        perror("socket");        return 1;    }    if(bind(s,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0){        perror("bind");        return 1;    }    listen(s,5);    sin_size=sizeof(struct sockaddr_in);    if((fd=accept(s,(struct sockaddr *)&remote_addr,&sin_size))<0)    {        perror("accept");        return 1;    }    printf("accept client %s\n",inet_ntoa(remote_addr.sin_addr));    len=send(fd,"welcome to my server\n",21,0);    for(i=0;i<5;i++){        len=recv(fd,buf,BUFSIZ,0);        buf[len]='\0';        printf("%s\n",buf);    }    close(fd);    close(s);    return 0;}
mqq@208_181:~/fabricehao/test/20120726> cat badclient.c #include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main(args,argv){    int i,s,fd,len;    struct sockaddr_in remote_addr;    int sin_size;    char buf[BUFSIZ];    memset(&remote_addr,0,sizeof(remote_addr));    remote_addr.sin_family=AF_INET;    remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");     unsigned int pp=87654;    remote_addr.sin_port=htons(pp);    if((s=socket(AF_INET,SOCK_STREAM,0))<0){        perror("socket");        return 1;    }    if(connect(s,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr))<0){        perror("connect");        return 1;    }    printf("connect to server");    len=recv(s,buf,BUFSIZ,0);    buf[len]='\0';    printf("%s",buf);    len=send(s,"test1 message",13,0);    len=send(s,"test2 message",13,0);    len=send(s,"test3 message",13,0);    len=send(s,"test4 message",13,0);    len=send(s,"test5 message",13,0);    close(s);    return 0;}
betterserver.c
len=recv(fd,buf,13,0);指定了缓冲
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>int main(int args,char * argv){    int i,s,fd,len;    struct sockaddr_in my_addr;    struct sockaddr_in remote_addr;    int sin_size;    char buf[BUFSIZ];    memset(&my_addr,0,sizeof(my_addr));    my_addr.sin_family=AF_INET;    my_addr.sin_addr.s_addr=INADDR_ANY;    unsigned int pp=87654;    my_addr.sin_port=htons(pp);    if((s=socket(AF_INET,SOCK_STREAM,0))<0){        perror("socket");        return 1;    }    if(bind(s,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0){        perror("bind");        return 1;    }    listen(s,5);    sin_size=sizeof(struct sockaddr_in);    if((fd=accept(s,(struct sockaddr *)&remote_addr,&sin_size))<0)    {        perror("accept");        return 1;    }    printf("accept client %s\n",inet_ntoa(remote_addr.sin_addr));    len=send(fd,"welcome to my server\n",21,0);    for(i=0;i<5;i++){        len=recv(fd,buf,13,0);        buf[len]='\0';        printf("%s\n",buf);    }    close(fd);    close(s);    return 0;}


liburl使用
mqq@208_181:~/fabricehao/test/20120726> cat liburl.c #include <stdio.h>#include <curl/curl.h>int main(int args,char * argv){    CURL * curl;    CURLcode res;    curl =curl_easy_init();    if(!curl)    {        perror("curl");        return 1;    }    curl_easy_setopt(curl,CURLOPT_URL,argv[1]);    curl_easy_setopt(curl,CURLOPT_PROXY,"webproxy:8080");    res=curl_easy_perform(curl);    curl_easy_cleanup(curl);    return 0;}
yum install libcurl-devel   
这个是依赖
gcc -I /usr/local/include/ -o getweb liburl.c -lcurl
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

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