首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

加入fork()的差异(执行结果)

2012-09-28 
加入fork()的区别(执行结果)加入fork()的区别(执行结果)server2.c#include sys/socket.h#include netin

加入fork()的区别(执行结果)

加入fork()的区别(执行结果)

server2.c

#include <sys/socket.h>#include <netinet/in.h>int main(int argc,char **argv){  int sockfd;  sockfd = socket(AF_INET,SOCK_STREAM,0);  struct sockaddr_in sin;  sin.sin_family=AF_INET;  sin.sin_port = htons(8000);  sin.sin_addr.s_addr = htonl(INADDR_ANY);  //配置本地信息,使socket与本机地址及端口号绑定  bind(sockfd,(struct sockaddr *)&sin,sizeof(sin));  perror("bind");  //监听并建立输入队列,限制最大请求数  listen(sockfd,10);  perror("listen");  struct sockaddr_in pin;  int address_size = sizeof(pin);  int temp_sockfd;  char *msg="Hello!";  while(1){    printf("accept……sockfd %d\n",sockfd);    //接收连接请求,建立一个新socket    temp_sockfd = accept(sockfd,(struct sockaddr *)&pin,&address_size);    printf("accept……temp_sockfd %d\n",temp_sockfd);    //在新socket上进行数据传输    if(send(temp_sockfd,msg,strlen(msg),0)==-1){      perror("send");      exit(1);    }    //建立子进程    if(!fork()){       //接收客户端的信息       char recvserver[256];       memset(recvserver,0,256);       printf("%s %d\n",recvserver,strlen(recvserver));       recv(temp_sockfd,recvserver,sizeof(recvserver),0);       printf("%s %d\n",recvserver,strlen(recvserver));       close(temp_sockfd);       exit(0);   }    close(temp_sockfd);   }}    

?server3.c(不加fork)

#include <sys/socket.h>#include <netinet/in.h>int main(int argc,char **argv){  int sockfd;  sockfd = socket(AF_INET,SOCK_STREAM,0);  struct sockaddr_in sin;  sin.sin_family=AF_INET;  sin.sin_port = htons(8000);  sin.sin_addr.s_addr = htonl(INADDR_ANY);  bind(sockfd,(struct sockaddr *)&sin,sizeof(sin));  perror("bind");  listen(sockfd,10);  perror("listen");  struct sockaddr_in pin;  int address_size = sizeof(pin);  int temp_sockfd;  char *msg="Hello!";  while(1){    printf("accept……sockfd %d\n",sockfd);    temp_sockfd = accept(sockfd,(struct sockaddr *)&pin,&address_size);    printf("accept……temp_sockfd %d\n",temp_sockfd);    if(send(temp_sockfd,msg,strlen(msg),0)==-1){     perror("send");     exit(1);    }        //接收客户端的信息    char recvserver[256];    memset(recvserver,0,256);     printf("%s %d\n",recvserver,strlen(recvserver));    recv(temp_sockfd,recvserver,sizeof(recvserver),0);   printf("%s %d\n",recvserver,strlen(recvserver));    close(temp_sockfd);   }}    

?执行结果:

[wangcm@wang socket]$ ./server3
bind: Success
listen: Success
accept……sockfd 3
accept……temp_sockfd 4
?0
server,hello!I am client! 25
accept……sockfd 3


[wangcm@wang socket]$ ./server2
bind: Success
listen: Success
accept……sockfd 3
accept……temp_sockfd 4
accept……sockfd 3
?0
server,hello!I am client! 25

?

客户端:client2.c

#include <stdio.h>#include <netinet/in.h>#include <sys/socket.h>#include <stdlib.h>#include <sys/types.h>#include <errno.h>#include <string.h>#include <dirent.h>#include <netdb.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc,char **argv){ char *host_name="127.0.0.1"; struct hostent *server_host_name; server_host_name=gethostbyname(host_name);  int sockfd; //建立socket sockfd=socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in pin; pin.sin_family=AF_INET; pin.sin_addr.s_addr = ((struct in_addr *)(server_host_name->h_addr))->s_addr; pin.sin_port=htons(8000); //建立连接,之前先赋值 connect(sockfd,(struct sockaddr *)&pin,sizeof(pin)); perror("send");  char buffer[256]; //memset()是内存赋值函数,用来给某一内存空间赋值, //memset(void* _dst,int val,int len),_dst是目标起始地址,val是要赋的值,len要赋值的字节数 memset(buffer,0,256); printf("%s %d\n",buffer,strlen(buffer)); //接收数据 recv(sockfd,buffer,sizeof(buffer),0); printf("%s %d\n",buffer,strlen(buffer));  //传输数据 char *sendserver="server,hello!I am client!"; if(send(sockfd,sendserver,strlen(sendserver),0)==-1){   perror("send");   exit(1); } close(sockfd);}
?

热点排行