1、套接字地址结构:

struct sockaddr {
  sa_family_t sa_family;
  char sa_data[14];
};

其中,成员sa_family表示套接字的协议族类型,对应于TCP/IP协议该值为AF_INET;成员sa_data存储具体的协议地址。

sa_data之所以被定义成14个字节,因为有的协议族使用较长的地址格式。一般在编程中并不对该结构体进行操作,

而是使用另一个与它等价的数据结构:sockaddr_in

每种协议族都有自己的协议地址格式,TPC/IP协议族的地址格式为结构体struct sockaddr_in

他在netinet/in.h头文件中定义。

struct sockaddr_in
{
  unsigned short   sin_family;

  unsigned short   sin_port;
  struct in_addr    sin_addr; /* Internet address. */

  unsigned char    sin_zero[8];

};

其中成员sin_family表示地址类型,对于使用TCP/IP协议进行的网络编程,该值只能是AF_INET。

sin_port是端口号,

sin_addr用来存储32位的ip地址。

数组sin_zero为填充字段,一般赋值为0

结构体struct in_addr的定义如下:

struct in_addr{

  unsigned long  s_addr;

};

结构体sockaddr 的长度为16个字节,结构体sockaddr_in的长度也为16个字节。通常在编写基于TCP/IP协议

的网络程序时,使用结构体sockaddr_in来设置地址,然后通过强制类型转换成sockaddr 类型。

以下是设置地址信息的示例代码:

struct sockaddr_in sock;

sock.sin_family = AF_INET ;

sock.sin_port = htons(6000);

sock.sin_addr.s_addr = inet_addr("200.200.3.18");

memset(sock.sin_zero, 0, sizeof(sock.sin_zero));

2、创建套接字

socket函数用来创建一个套接字。

int socket(int domain, int type, int protocol);

参数domain用于指定创建套接字所使用的协议族,

常用的协议族:

AF_UNIX, AF_LOCAL 创建只在本机内进行通信的套接字
AF_INET     使用 IPv4   TCP/IP 协议
AF_INET6      使用 IPv6    TCP/IP 协议

参数type指定套接字的类型,可取如下值:

SOCK_STREAM 创建TCP流套接字

SOCK_DGRAM 创建UDP数据报套接字

SOCK_RAW 创建原始套接字

参数protocol通常设置为0,表示通过参数domain指定的协议族和参数type指定的套接字类型来确定使用的协议。当创建原始

套接字时,系统无法唯一地确定协议,此时就需要使用该参数指定所使用的协议。

---------------------------------------

创建TCP套接字:

int sock_fd;

sock_fd = socket(AF_INET, SOCK_STREAM, 0);

if  (sock_fd  <  0)

{

  perror("socket error:");

  exit(1);

}

创建UDP套接字:

int sock_fd;

sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

套接字编程,创建套接字socket的更多相关文章

  1. nginx源代码分析--监听套接字的创建 套接字的监听 HTTP请求创建连接

    作为一个webserver,那么肯定是有监听套接字的,这个监听套接字是用于接收HTTP请求的,这个监听套接字的创建是依据配置文件的内容来创建的,在nginx.conf文件里有多少个地址就须要创建多少个 ...

  2. Python套接字编程(1)——socket模块与套接字编程

    在Python网络编程系列,我们主要学习以下内容: 1. socket模块与基本套接字编程 2. socket模块的其他网络编程功能 3. SocketServer模块与简单并发服务器 4. 异步编程 ...

  3. 套接字编程(VC_Win32)

    简介(源于维基) Berkeley套接字(也作BSD套接字应用程序接口)刚开始是4.2BSD Unix操作系统(于1983发布)的一套应用程序接口.然而,由于AT&T的专利保护着UNIX,所以 ...

  4. UNIX网络编程——原始套接字SOCK_RAW

    实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM).而这些数据包都是由系统提供的协议栈实现, ...

  5. Linux之socket套接字编程20160704

    介绍套接字之前,我们先看一下传输层的协议TCP与UDP: TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UD ...

  6. 【UNIX网络编程(四)】TCP套接字编程具体分析

    引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...

  7. 20181225 基于TCP/IP和基于UDP/IP的套接字编程

    一.TCP/IP的套接字编程 服务器端代码: import  socket​server = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.sock ...

  8. TCP/IP网络编程之网络编程和套接字

    网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...

  9. day31 socket套接字编程

    为什么要有套接字编程? 在上节课的学习中,我们学习了OSI七层协议,但是如果每次进行编程时我们都需要一层一层的将各种协议使用在我们的程序中,这样编写程序实在是太麻烦了,所以为了让程序的编写更加的简单, ...

  10. socket套接字编程 HTTP协议

    socket套接字编程  套接字介绍  1. 套接字 : 实现网络编程进行数据传输的一种技术手段  2. Python实现套接字编程:import  socket  3. 套接字分类 >流式套接 ...

随机推荐

  1. RN酷炫组件圆形加载

    地址:https://js.coach/react-native/react-native-circular-progress?search=react-native 别谢我 点个赞就行 ## Use ...

  2. 无视编码都统一转成unicode 然后截断 例如 。“发发发发发发” 操作之后显示为 “发发发发...”

    -- local function checkPlayName( str ) -- str = Utils.utf8_to_unicode(str)-- local retStr = "&q ...

  3. Intellij idea创建maven项目并配置tomcat

    今天刷知乎的时候刷到这么一句话 我觉得还是蛮有趣的,形容的也比较到位,正好最近新建maven项目进行了thrift数据的传输,在此做一个记录 首先idea整合了maven,不需要单独下载 新建一个Pr ...

  4. 踩坑记录:spring boot的POST请求数据注入不了的问题

    概述: 今天在使用spring boot框架的时候,踩了一个坑,是关于control层request body依赖注入的问题的,内容如下: 进过: 由于目前公司采用的系统架构,要求把springboo ...

  5. Oracel 中的分页

    --效率低 select * from (select rownum rn, d.* from table d )p where p.rn<=20 and p.rn>=10; select ...

  6. python中enumerate内置库的使用

    使用enumerate,可以自动进行索引下标的赋值,本例代码中使用enumerate,进行excel单元格的赋值操作. 代码如果重复被调用,可将该代码封装成类进行使用 1 import openpyx ...

  7. JS client(X,Y)、screen(X,Y)、page(X,Y)的区别

    clientX:光标相对于当前窗口的水平位置: clientY :光标相对于当前窗口的垂直位置: screenX :光标相对于该屏幕的水平位置: screenY:光标相对于该屏幕的垂直位置: page ...

  8. 微信小程序不可操作dom节点

    //根据历史记录快速搜索 fastSearch:function(e){ console.log(e.currentTarget.id) wx.navigateTo({ url: '../search ...

  9. PHP数组排序函数有哪些

    PHP数组排序函数有哪些 一.总结 一句话总结:其实也就是是否保持索引,对键排序还是对值排序,除了sort,rsort.shuffle,usort外,都是保持索引的 是否保持索引 键排序 值排序 除了 ...

  10. 在远程连接一个 Wndows 10的情况下,重启远程机器

    如果你从菜单找的话,是找不到这个菜单的!!! 你应该直接按 alt + F4 , 就会出现这个选项了. 参考: https://tommynation.com/shut-windows-10-remo ...