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. 利用React Native 从0到1 开发一款兼容IOS和android的APP(仿造京东)

    最近有一部电视剧叫做<微微一笑很傻逼>里面有个男猪脚,人们都叫他大神~我觉得吧~大神是相对的~所以~啥事都得谦虚! 好了 今天介绍的是如何从0到1利用React Native开发一款兼容I ...

  2. JAVA中使用浮点数类型计算时,计算精度的问题

    标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...

  3. sqlserver 中常见的函数 数学函数

    create table testnum( ID int identity(1,1), num float) insert testnum values (1) insert testnum valu ...

  4. 批处理数据库(利用batch插入2w条数据)

    public class Demo02Batch { /* * 批处理 */ public static void main(String[] args) { Connection conn=null ...

  5. JAVA基础知识总结:十八

    一.进程和线程 1.进程 是一个程序的运行状态和资源占用的描述 进程的特点: a.独立性:不同的进程之间是独立的,相互之间资源不共享 b.动态性:进程在系统中不是静止不动的,而是一直活动的 c.并发性 ...

  6. python中进程间通讯——文件锁之fcntl模块的使用

    python 中给文件加锁——fcntl模块import fcntl 打开一个文件##当前目录下test文件要先存在,如果不存在会报错.或者以写的方式打开f = open('./test')对该文件加 ...

  7. 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形网格动态加载

    jQuery EasyUI 树形菜单 - 树形网格动态加载 动态加载树形网格有助于从服务器上加载部分的行数据,避免加载大型数据的长时间等待.本教程将向您展示如何创建带有动态加载特性的树形网格(Tree ...

  8. 20181014xlVBA获取小题零分名单

    Sub GetZeroName() Dim Dic As Object Const SUBJECT = "科目名称" Dim Key As String Dim OneKey Di ...

  9. Django的缓存

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显, 最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

  10. Anya and Cubes CodeForces - 525E (双端搜索)

    大意: 给定$n$元素序列$a$, 可以任选不超过$k$个$a_i$变换为$a_i!$, 求变换后任选若干元素和为S的方案数. 分成两块暴搜, 复杂度$O(3^{\frac{n}{2}})$ #inc ...