sockaddr_in 结构体

strcut sockaddr 是用来描述 IPv4 地址协议,原始结构体 sockaddr 已经被废弃掉了。
在这里插入图片描述
常使用 strcut sockaddr_in 类型。

struct sockaddr_in {
    sa_family_t sin_family; // IP版本: AF_INET AF_INET6
    in_port_t sin_port; //端口号(网络字节序)
    struct in_addr sin_addr; // IP 地址(网络字节序)只含有一个元素的结构体
};
struct in_addr {
    uint32_t s_addr; // 网络字节序
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《嵌入式系统设计与应用》 课程设计报告 专 业: 班 级:   姓 名: 学 号: 指导教师:      目 录 一、设计目的 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、付费专栏及课程。

余额充值