1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <errno.h>
 4 #include <string.h>
 5 #include <sys/types.h>
 6 #include <netinet/in.h>
 7 #include <sys/socket.h>
 8 #include <sys/wait.h>
 9 
10 #define SERVPORT 3333 //服务端口
11 #define BACKLOG 10 //最大连接数
12 
13 int main(void)
14 {
15   int sockfd; //监听的socket
16   if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
17   {
18     printf("socket 创建失败!");
19     exit(1);
20   }
21   printf("创建监听socket成功!\n");
22 
23   struct sockaddr_in myAddr;  //本机地址信息的结构体
24 
25   /*配置本机socket连接有关信息*/
26   myAddr.sin_family=AF_INET;
27   myAddr.sin_port=htons(SERVPORT);
28   myAddr.sin_addr.s_addr=INADDR_ANY;  //任意地址
29   bzero(&(myAddr.sin_zero),8);   //填充0,保持大小一致
30 
31   if(bind(sockfd,(struct sockaddr*)&myAddr,sizeof(struct sockaddr))==-1)  //将创建的socket和有关本机socket配置绑定
32   {
33     printf("bind 出错!");
34     exit(1);
35   }
36   printf("socekt绑定成功!\n");
37 
38   /*下面listen,使socket处于被动监听模式,并为该socket建立一输入数据队列,将到达的服务请求保存在此队列,直到程序处理它们*/
39   printf("服务端开始listen......\n");
40   int lisVal=listen(sockfd,BACKLOG);
41   printf("zhi %d",lisVal);
42   if(lisVal==-1)
43   {
44     printf("listern 出错!");
45     exit(1);
46   }
47 printf("------listen is ok----");
48   while(1)
49   {
50     struct sockaddr_in remoteAddr; //客户端地址信息
51     int clientFd;   //数据传输socket  
52     int sin_size=sizeof(struct sockaddr_in);
53     printf("----------");
54     if((clientFd=accept(sockfd,(struct sockaddr*)&remoteAddr,&sin_size))==-1)  //服务器接受客户的连接请求
55     {
56       printf("accept erro!");
57       continue;
58     }
59 
60     printf("收到一个连接来自:%s\n",inet_ntoa(remoteAddr.sin_addr));  //将网络地址转换成“.”点隔的字符串格式。
61 
62     if(!fork())  //创建一个子进程
63     {
64       char* msg="连接上了,来自服务端的消息。\n";
65       if(send(clientFd,msg,sizeof(msg),0)==-1)   //子进程向这个连接发送一条信息
66       {
67         printf("send 出错!");
68     close(clientFd);
69     exit(0);
70       }
71     }
72     close(clientFd);
73   }
74 }
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <errno.h>
 4 #include <string.h>
 5 #include <netdb.h>
 6 #include <sys/types.h>
 7 #include <netinet/in.h>
 8 #include <sys/socket.h>
 9 
10 #define SERPORT 3333  //服务端口
11 #define MAXDATASIZE 100  //每次最大数据传输量
12 char* DES="127.0.0.1";//"192.168.1.101";   //目的地地址
13 
14 int main(int argc,char* *argv[])
15 {
16 
17 /*
18   if(argc<2)
19   {
20     printf("未输入服务器地址!\n");
21     exit(1);
22   }
23 */  
24   struct hostent * host;   //服务端信息结构体
25   int sockfd;   //socket标识
26   
27   if((host=gethostbyname(DES))==NULL)  //argv[1]
28   {
29     printf("gethostbyname错误!\n");
30     exit(1);
31   }
32   
33   printf("目的地址为:%s\n",host->h_name);
34   
35   if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
36   {
37     printf("创建socket失败!\n");
38     exit(1);
39   }
40   printf("创建socket成功!\n");
41   
42   /*配置目的地址信息*/
43   struct sockaddr_in servAddr;
44   servAddr.sin_family=AF_INET;
45   servAddr.sin_port=htons(SERPORT);
46   servAddr.sin_addr=*((struct in_addr *)host->h_addr);
47   bzero(&(servAddr.sin_zero),8);
48  
49   if(connect(sockfd,(struct sockaddr *)&servAddr,sizeof(struct sockaddr))==-1)  //发起连接
50   {
51     printf("连接出错\n");
52     exit(1);
53   }
54   printf("连接成功!\n");
55   
56   int recvbytes=0;   //收到的字节数
57   char buf[MAXDATASIZE];   //缓冲区
58   
59   if((recvbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1)
60   {
61     printf("接收出错!\n");
62     exit(1);
63   }
64 
65   buf[recvbytes]='\0';
66   printf("recvbytes值:%d \n收到信息:%s\n",recvbytes,buf);
67   printf("结束\n");
68   close(sockfd);
69 
70   return 0;
71 }

 

posted on 2014-01-06 10:27  简单的信仰  阅读(219)  评论(0编辑  收藏  举报