简陋的服务端代码
作者:互联网
#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; }
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