zoukankan      html  css  js  c++  java
  • 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成功!
    ");
    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绑定成功!
    ");
    37 
    38   /*下面listen,使socket处于被动监听模式,并为该socket建立一输入数据队列,将到达的服务请求保存在此队列,直到程序处理它们*/
    39   printf("服务端开始listen......
    ");
    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
    ",inet_ntoa(remoteAddr.sin_addr));  //将网络地址转换成“.”点隔的字符串格式。
    61 
    62     if(!fork())  //创建一个子进程
    63     {
    64       char* msg="连接上了,来自服务端的消息。
    ";
    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("未输入服务器地址!
    ");
    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错误!
    ");
    30     exit(1);
    31   }
    32   
    33   printf("目的地址为:%s
    ",host->h_name);
    34   
    35   if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
    36   {
    37     printf("创建socket失败!
    ");
    38     exit(1);
    39   }
    40   printf("创建socket成功!
    ");
    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("连接出错
    ");
    52     exit(1);
    53   }
    54   printf("连接成功!
    ");
    55   
    56   int recvbytes=0;   //收到的字节数
    57   char buf[MAXDATASIZE];   //缓冲区
    58   
    59   if((recvbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1)
    60   {
    61     printf("接收出错!
    ");
    62     exit(1);
    63   }
    64 
    65   buf[recvbytes]='';
    66   printf("recvbytes值:%d 
    收到信息:%s
    ",recvbytes,buf);
    67   printf("结束
    ");
    68   close(sockfd);
    69 
    70   return 0;
    71 }
  • 相关阅读:
    Raft协议备注
    领域建模笔记
    Spark编程模型
    Spark如何删除无效rdd checkpoint
    Parquet 列式存储格式
    SpringBoot中ConditionalOnClass注解的原理
    SpringBoot定制Sevlet容器原理
    分析JDK的动态代理原理
    简述SpringCloud底层原理
    简述SpringCloud框架
  • 原文地址:https://www.cnblogs.com/jiayith/p/3506716.html
Copyright © 2011-2022 走看看