c语言初始化socket,C语言socket编程----struct sockaddr 和struct sockaddr_in介绍和初始化...

sockaddr结构体

struct  sockaddr{

sa_family_t  sa_family; //地址族,最常用的是"AF_INET"(IPV4)和"AF_INET6"(IPV6);

char  sa_data[14];      //包含套接字中的目标地址和端口信息;

};

sockaddr的缺陷:sa_data把目标地址和端口信息混在一起了

sockaddr_in 结构体

sockaddr_in结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中

struct  sockaddr_in/  struct  sockaddr_in6结构体

struct  sockaddr_in{

sa_family_t   sin_family;  //地址族,常用AF_INET

uint16_t         sin_port;     //16位TCP/UDP端口号

struct  in_addr  sin_addr;    //32位IP地址

cha         sin_zero[8]   //不使用

};

struct  in_addr{

in_addr_t    s_addr;      //32位IPV4地址

}

struct sockaddr_in6 {

sa_family_t     sin6_family; /* AF_INET6 */

in_port_t      sin6_port; /* port number */

uint32_t       sin6_flowinfo; /* IPv6 flow information */

struct in6_addr    sin6_addr; /* IPv6 address */

uint32_t        sin6_scope_id; /* Scope ID (new in 2.4) */

};

struct in6_addr {

unsigned  char s6_addr[16]; /* IPv6 address */

};

struct  sockaddr_in6相关详见 :http://man7.org/linux/man-pages/man7/ipv6.7.html

初始化和赋值:

IPV4

struct sockaddr_in ina;

bzero(&ina,sizeof(ina));

ina.sin_family=AF_INET;

ina.sin_port=htons(23);

ina.sin_addr.s_addr = inet_addr("132.241.5.10");

IPV4相关例子参考 http://www.cnblogs.com/huqian23456/archive/2011/02/22/1961822.html

IPV6

const   ipv6_addr = "::1";    //IPV6地址

struct   sockaddr saddr;

memset(&saddr, 0, sizeof(saddr));  /  /初始化结构体

saddr.sa_family = AF_INET6;

inet_pton(AF_INET6,ipv6_addr,saddr.sa_data);    //设置地址

struct sockaddr_in6 from_addr;

bzero(&from_addr,sizeof(from_addr));    //初始化结构体

from_addr.sin6_family = AF_INET6;   //设置地址家族

from_addr.sin6_port = htons(800);    //设置端口

inet_pton(AF_INET6,ipv6_addr,from_addr.sin6_addr.s6_addr );   //设置地址

inet_pton inet_ntop 地址转换相关详见 https://www.cnblogs.com/s7vens/archive/2011/12/12/2284964.html

C语言socket编程

建议先去看一下思路 真的写的很不错呦~ 思路参考博客:https://www.cnblogs.com/renfanzi/p/5713054.html linux c语言socket编程代码(单一服务端 ...

结构体struct sockaddr_in, struct sockaddr,struct in_addr

一.结构体 struct sockaddr_in,  struct sockaddr,  struct in_addr struct sockaddr_in,  struct sockaddr,str ...

计算机网络|C语言Socket编程,实现两个程序间的通信

C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图

[转]C语言SOCKET编程指南

1.介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等 ...

C语言SOCKET编程指南

1.介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措? ...

C语言socket编程--每日签到

前几天写了个python的每日签到,你运行还得借助crontab,很是不爽.....正好前几天看了个关于c编写daemon进程,加上自己那点可怜的socket知识,于是我们重操旧页,C语言版的每日签到 ...

C语言Socket编程(计算机网络作业)

最近我计算机网络课程要做作业了,没办法跟着老师一步一步的写C语言的代码,使用的计算就是Socket通信发送消息:代码实现的功能很简单,客户端向服务器端发送消息,服务器端接收客户端发来的消息,并且输出显 ...

转:struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系

在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:typedef unsigned short sa_family_t; ...

多种语言socket编程集锦—win32

原文 http://www.blogjava.net/huyi2006/articles/263831.html 借此地方整理以下socket编程的多种语言的实现,socket可以跨平台的通信,因此多 ...

随机推荐

C#高级编程笔记 Delegate 的粗浅理解 2016年9月 13日

Delegate [重中之重] 委托 定义一:(参考)http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html 完全可 ...

3_for循环的拓展应用

HTML代码:

杭电ACM2058--The sum problem

http://acm.hdu.edu.cn/showproblem.php?pid=2058 以为简单的穷举就完了,结果是一直Time Limit Exceeded.. 这是代码: #include ...

FOR 循环 索引从n 开始

RF 中FOR 循环默认是从0开始,如果想从任意n开始如下所示: 方法一: 结果,如你所愿输出1-6: 方法二,利用FOR遍历list来实现: 结果: 这里注意是输出1-9而不是1-10

【读书札记】建立第一个Web项目

安装配置好jdk.tomcat,我用的版本号是7.0.54,我放在C:\server\apache-tomcat-7.0.54下, CATALINA_BASE:C:\server\apache-tom ...

jQuery图片轮播的具体实现

先看一看html代码,以及对应的css代码:

   
  • ...

Python之False和None

这个其实在Python文档当中有写了,为了准确起见,我们先引用Python文档当中的原文: In the context of Boolean operations, and also when ex ...

SpringBoot使用redis缓存List<;Object>;

一.概述 最近在做性能优化,之前有一个业务是这样实现的: 1.温度报警后第三方通讯管理机直接把报警信息保存到数据库 2.我们在数据库中添加触发器,(BEFORE INSERT)根据这条报警信息处理业务 ...

jQuery $.each()常见的几种使用方法

王立平--查看SQLite中的数据信息

Eclipse菜单Window - Open Perspective - DDMS进入DDMS视图. 然后File Explorer View中依次展开路径/data/data/package_nam ...

你可能感兴趣的:(c语言初始化socket)