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. svn的使用教程

    引言:这里只讲解几个svn不常用但是非常有用的使用方法,对于经常使用的不做概述,因为很简单,而且网上都能找到. 1.1 svn历史版本对比已经恢复到指定版本(myeclipse) 在项目中的文件或者文 ...

  2. async、await在ASP.NET[ MVC]中之线程死锁的故事

    场景重构 public ActionResult Index(string ucode) { string userInfo = GetUserInfo(ucode).Result; ViewData ...

  3. STL_map.VC6简单使用例子

    1. #include <windows.h> //使用map时会出现如下警告:主要意思是 identifier was truncated to '255' characters in ...

  4. AtCoder Grand Contest 027 C ABland Yard

    ABland Yard 思路: 用了类似拓扑排序的方法来判环 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optim ...

  5. JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分

    Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简单的判断).Action层:引用对应的Servi ...

  6. Feign二: @FeignClient 接口调用

    在项目的启动文件加入:@EnableFeignClients 注解, import org.springframework.boot.SpringApplication; import org.spr ...

  7. 雷林鹏分享:jQuery EasyUI 数据网格 - 添加分页组件

    jQuery EasyUI 数据网格 - 添加分页组件 本实例演示如何从服务器端加载数据,如何添加分页组件(pagination)到数据网格(datagrid). 创建数据网格(DataGrid) 为 ...

  8. 大数据量 与 UI交互时的处理 总结与心得

    [以下均在主线程中操作时]1.UI直接操作,数据量较大时,直接使用UI会非常慢2.数据驱动操作,数据量较大时,数据与UI的交互效率相比“1”提升明显 总结:但以上这两种操作  都会“较长时间”占用主线 ...

  9. gem "searchkick"(4500✨) 智能搜索(使用Elastic search)(Gorails:建立一个侧边搜索栏)

    Searchkick

  10. 微信小程序双击事件的绑定