1. 程式人生 > >unix下編寫socket程式的一般步驟

unix下編寫socket程式的一般步驟

{
    
int listenfd,clifd;
    
long pid;
    
struct sockaddr_in myaddr,cliaddr;

    
int ret;
    
int len;

    listenfd
=socket(AF_INET,SOCK_STREAM,0);
    
if (listenfd<0)
     
{
      perror(
"socket error");
      exit(
-1);
     }


    myaddr.sin_family
=AF_INET;
    myaddr.sin_addr.s_addr
=htonl(INADDR_ANY);
    myaddr.sin_port
=htons(8888);

    ret
=bind(listenfd,(struct sockaddr *)&myaddr,sizeof(myaddr));
    
if (ret<0)
     
{
      perror(
"bind error");
      exit(
-1);
     }

    listen(listenfd,
10);
    len
=sizeof(struct sockaddr);
    
while(1)
     
{
      clifd
=accept(listenfd,(struct sockaddr*)&cliaddr,&len);
       
/*注意accept的第三個引數也是地址*/
      
if(clifd==-1)
       
{
        perror(
"accept error");
        
continue;
        }

      printf(
"connect from %s %d ",inet_ntoa(cliaddr.sin_addr.s_addr),ntohs(cliaddr.sin_port));

      
switch(pid=fork())
       
{
        
case0/*子程序*/
           close(listenfd);
           ;
/*子程序進行其他的操作
*/

           close(clifd);
           exit(
0);
           
break;
        
case-1:
           perror(
"fork error");
           
break;
           
default:/*父程序*/
           close(clifd);
           
break;

        }

       }


      }