unix下編寫socket程式的一般步驟
阿新 • • 發佈:2018-12-27
{
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;
}
}
}
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
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);
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;
}
}
}