一个UNIX下面的程序
socketfd = socket(AF_INET,SOCK_STREAM,0);
close(socketfd);    // 这句对吗 ? 我只知道有shundown,closesocket

解决方案 »

  1.   


       俺也只知道VB里面的Socket编程,呵呵,不好意思!
      

  2.   

    应该先shundown,然后closesocket吧
      

  3.   

    对的吧,socketfd 是一个句柄,应该可以用close关闭,当然也可以用closesocket()
      

  4.   

    不可以,要用closesocket,最好先shundown
      

  5.   

    //这个程序unix和windows都可以用看看吧#ifndef unix
    #define WIN32
    #include <windows.h>
    #include <winsock.h>
    #else
    #define closesocket close //unix下关闭套接字用 close
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #endif#include <stdio.h>
    #include <string.h>#define PROTOPORT 5193 /*  缺省协议端口号  */
    #define QLEN      6    /*  请求队列大小    */int visits   =    0;   /*  计数客户连接    */
    /*------------------------------------------------
    *程序:server
    *目的:分配一个套接字,然后反复执行如下几步
    * (1) 等待客户的下一个连接
    * (2) 发送一个短消息给客户
    * (3) 关闭连接
    * (4) 转向(1)步
    *
    *语法:server  [ port ]
    *
    *                port - 使用的协议端口号
    *
    *注意:端口号可选。如果未指定端口号,服务器使用PROTOPORT中给定的缺省协议端口号
    *-------------------------------------------------
    */main(argc,argv)
    int  argc;
    char *argv[];
    {
    struct hostent *ptrh;    /*  指向主机列表中一个条目的指针  */
    struct protent *ptrp;    /*  指向协议列表中一个条目的指针  */
    struct sockaddr_in cad;  /*  存放客户IP地址的结构          */
    struct sockaddr_in sad;  /*  存放服务器IP地址的结构        */
    int    sd,sd2;           /*  套接字                        */
    int    port;             /*  协议端口号                    */
    int    alen;             /*  地址长度                      */
            char   buf[1000];        /*  供服务器发送字符串所用的缓冲  */#ifdef WIN32
            WSADATA wsaData;   //windows下初始化socket环境
            WSAStartup(0x0101,&wsaData);
    #endif
    memset((char *)&sad,0,sizeof(sad));  /*  清空sockaddr结构  */
    sad.sin_family=AF_INET;              /*  设置互联网协议族  */
    sad.sin_addr.s_addr=INADDR_ANY;      /*  设置本机IP地址    */
    if(argc>1)
    {
    port=atoi(argv[1]);          /*  将参数转换成二进制*/
    }
    else
    {
    port=PROTOPORT;             /*  使用缺省端口      */
    }
    if(port>0)                          /*  测试是否是合法的值*/
    {
    sad.sin_port=htons((u_short)port);
    }
    else                                /*  打印错误信息并退出*/
    {
    fprintf(stderr,"bad port number: %s\n",argv[1]);
    exit(1);
    }
    /*  将TCP传输协议名映射为协议号 */
    ptrp=getprotobyname("tcp");
    if(ptrp==NULL)
            {
                    fprintf(stderr,"cannot map \"tcp\" to protocol number");
                    exit(1);
            }
    /*  创建一个套接字  */
    sd=socket(PF_INET,SOCK_STREAM,ptrp->p_proto);
    if(sd < 0)
            {
                    fprintf(stderr,"socket creation failed\n");
                    exit(1);
            }
    /*  将本地地址绑定到套接字  */
    if(bind(sd,(struct sockaddr *)&sad,sizeof(sad))<0)
            {
                    fprintf(stderr,"bind failed");
                    exit(1);
            }
    /*  指定请求队列的长度  */
    if(listen(sd,QLEN) < 0)
            {
                    fprintf(stderr,"listen failed\n");
                    exit(1);
            } /*  主服务器循环--接受和处理请求  */
    while(1)
    {
    alen=sizeof(cad);
    if((sd2=accept(sd,(struct sockaddr *)&cad,&alen))<0)
    {
    fprintf(stderr,"accept failed\n");
    exit(1);
    }
    visits++;
    sprintf(buf,"This server has been contacted %d time%s\n"     ,visits,visits==1?".":"s.");
    send(sd2,buf,strlen(buf),0);
    closesocket(sd2);
    }
    }
      

  6.   

    shundown这个是看程序的需要了,不一定是必须的
    shutdown就是在设置相应的参数后,看是否停止收或发了,
    没有什么的,一般不用,而是直接closesocket
    但closesocket是一定要的