ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

简陋的服务端代码

2022-09-07 01:00:36  阅读:193  来源: 互联网

标签:sockaddr addr int 简陋 代码 fd include 服务端 struct


#include<stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> //#include<linux/in.h> #include <netinet/in.h> #include <arpa/inet.h> #include<stdlib.h> #include<string.h> #include <unistd.h> //127.0.0.1,它是一个特殊IP地址,表示本机地址 //sockaddr中包含了地址、端口和IP地址的信息。在进行地址绑定的时候,需要弦将地址结构中的IP地址、端口 //类型等结构struct sockaddr中的域进行设置之后才能进行绑定,这样进行绑定后才能将套接字文件描述符与地址等接合在一起。 int main() {     int n_read;     char readBuf[128];     char *str = "I get your message\n";         struct sockaddr_in s_addr;         struct sockaddr_in c_addr;     memset(&s_addr,0,sizeof(struct sockaddr_in));//结构体变量初始化     memset(&c_addr,0,sizeof(struct sockaddr_in));     //1 sockte int socket(int domain, int type, int protocol);     int s_fd;//服务端的文件描述符     int c_fd;//客户端的文件描述符     s_fd = socket(AF_INET,SOCK_STREAM,0);//创建套接字第一个参数代表ipv4,第二个是选择链接协议,第三个默认0系统自动选择用什么协议     if(s_fd == -1)     {         perror("socket");         exit(-1);     }
        s_addr.sin_family = AF_INET;//在sockaddr结构体中赋值使用ipv4网络         s_addr.sin_port = htons(8989);//设置链接端口号     //inet_aton("127.0.0.1",&s_addr.sin_addr);     //2 bind int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);     inet_aton("172.27.84.213",&s_addr.sin_addr);//转义将字符串的ip地址添加到结构体队接受ip地址的对应变量     //这里计算机并不认识字符串写的ip地址是什么意思,需要用inet_aton转换成ascii 系统认识的ip地址
    bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));     //绑定函数 1:服务端的文件描述符。2:将结构体中的ip拿出来强转成结构体指针。3:需要绑定的长度     //3 listen     listen(s_fd,10);//监听端口,监听10个链接请求     //4 accept     int clen = sizeof(struct sockaddr_in);     c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);     //accept函数指定服务端去接受客户端的连接接收后,返回了客户端套接字的标识,且     //获得了客户端套接字的“地方”(包括客户端IP和端口信息等)。     //第二个参数是一个结构体型的指针用来接受客户端的各种ip端口等信息。     //第三个参数是接受结构体的大小为什么不能写里面是函数原型的问题,里面必须是地址没得办法     while(1)     {     if(c_fd == -1)     {         perror("accept");     }     printf("get connect:%s\n",inet_ntoa(c_addr.sin_addr));//将客户端的ip转成字符串人能看懂     //inet_ntoa函数就是将ip地址进行相互转换成人或机器能识别的地址     //5 read     n_read = read(c_fd,readBuf,128);//从客户端读数据到缓冲区读128字节         if(n_read == -1)     {         perror("read");             }else     {         printf("get message:%d,%s\n",n_read,readBuf);     }  
    //6 write
    write(c_fd,str,strlen(str));//将字符串写道客户端,返回代表传输成功
    }
    return 0; }

标签:sockaddr,addr,int,简陋,代码,fd,include,服务端,struct
来源: https://www.cnblogs.com/ightningmcqueen/p/16663880.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有