Linux ---> 简单socket

 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 }

 

你可能感兴趣的:(socket)