in_addr与sockaddr

struct in_addr{
in_addr_t s_addr;
};
结构体in_addr表示一个32位IP地址的结构体
in_addr_t 一般为 32位的unsigned int,其字节顺序为网络顺序(network byte ordered),即该无符号整数采用大端字节序 [1] 。.
其中每8位代表一个IP地址位中的一个数值
例如192.e168.3.144记为0xc0a80390,其中 c0 为192 ,a8 为 168, 03 为 3 , 90 为 144
打印的时候可以调用 inet_ntoa()函数将其转换为char *类型.
打印的时候用printf("the ip addr is %s\n",inet_ntoa(sockaddr_in.in_addr));来打印点分IP地址
表示一个主机的端口地址(包括IP地址和端口号)的结构体是struct sockaddr 这个结构体可以由struct sockaddr_in等其他地址结构体强制转换而来。
struct sockaddr_in
{
    sa_family_t sin_family;
    in_port_t sin_port;
    struct in_addr;
    unsigned char  sin_zero[8];
} 
socket结构体中含有这个struct sockaddr地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。 服务端 和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。 比如上面的文件获取中,另外一个地方的程序就是服务端,我们从服务端获取文件过来。 [代码] [C/C++]代码 /******* 服务器程序 (server.c) ************/ #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int sockfd,new_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size,portnumber; char hello[]="Hello! Are You Fine?\n"; if(argc!=2) { fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]); exit(1); } if((portnumber=atoi(argv[1]))<0) { fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]); exit(1); } /* 服务器端开始建立socket描述符 */ if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { fprintf(stderr,"Socket error:%s\n\a",strerror(errno)); exit(1); } /* 服务器端填充 sockaddr结构 */ bzero(&server;_addr,sizeof(struct sockaddr_in)); server_addr.sin_family=AF_INET; server_addr.sin_addr.s_addr=htonl(INADDR_ANY); server_addr.sin_port=htons(portnumber); /* 捆绑sockfd描述符 */ if(bind(sockfd,(struct sockaddr *)(&server;_addr),sizeof(struct sockaddr))==-1) { fprintf(stderr,"Bind error:%s\n\a",strerror(errno)); exit(1); } /* 监听sockfd描述符 */ if(listen(sockfd,5)==-1) { fprintf(stderr,"Listen error:%s\n\a",strerror(errno)); exit(1); } while(1) { /* 服务器阻塞,直到客户程序建立连接 */ sin_size=sizeof(
《嵌入式系统设计与应用》 课程设计报告 专 业: 班 级:   姓 名: 学 号: 指导教师:      目 录 一、设计目的 3 二、开发环境 3 三、设计任务及要求 3 四、实现过程 3 4.1用户应用程序设计 3 4.2服务器端程序 3 4.3客户端程序 5 4.3 编译与运行结果 7 五、总结 7 一、设计目的 (1)、熟悉并掌握在Linux开发环境下C语言程序设计及编译方法、嵌入式系统; (2)、掌握嵌入式linux下基础网络编程:socket编程 (3)、独立编写客户机/服务器通信程序; 二、开发环境 (1) 编程环境:在Linux开发环境下设计及编译C语言程序。 (2) 硬件设备:PXA270开发板,PC机。 三、设计任务及要求 设计一套可远程调用求和函数并返回客户端的程序。 四、实现过程 4.1用户应用程序设计 1.程序sum.h int sum(); 2.程序sum.c #include <stdio.h> int sum(){ int i=1,sum=0; while(i<=100){ sum=sum+i; i++; } return sum; } 4.2服务器端程序 /******************************* * 服务器端程序 server.c * ********************************/ #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include "sum.h" main() { int sockfd,new_fd,numbytes; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size,sum; char buff[100] ,temp[100]; sum=sum(); itoa(sum, temp, 10); //服务器端建立TCP协议的socked套接字描述符 if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } printf("socket success!,sockfd=%d\n",sockfd); //服务器端初始化sockaddr结构体,绑定2323端口 my_addr.sin_family = AF_INET; my_addr.sin_port = htons(2323); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8); //绑定套接字描述符sockfd if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1) { perror("bind"); exit(1); } printf("bind success!\n"); //创建监听套接字描述符sockfd if(listen(sockfd,10)==-1) { perror("listen"); exit(1); } printf("listening....\n"); //服务器阻塞监听套接字,循环等待客户端程序连接 while(1) { sin_size = sizeof(struct sockaddr_in); //如果建立连接,将产生一个全新的套接字 if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==-1) { perror("accept"); exit(1); } //生成一个子进程来完成和客户端的会话,父进程继续监听 if(!fork()) { //读取客户端发来的信息 if((numbytes = recv(new_fd,buff,strlen(buff),0))==-1) { perror("recv"); exit(1); } //将从客户端接收到的信息再发回客户端 if(send(new_fd,temp,strlen(buff),0)==-1) perror("send"); /* 本次通信结束 */ close(new_fd); exit(0); } /* 下一个循环 */ // close(new_fd); } cl

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值