socket又叫做套接字,网络编程又叫做套接字编程。而socket地址也称为套接字地址,可以理解为计算机的网络地址。

1.理解socket地址

假设小明同学想给女神打电话需要知道对方的电话号码才能继续沟通,而我们进行网络通信也需要知道对方的socket地址。

电话号码以北京地区为例,如010-82512345,有两部分组成,3位区号,8位号码,3-8组合。区号用于标示这在北京,号码用于标示北京具体哪个电话机。

而在网络通信中,采用类似方法标示socket地址。

socket地址最关键的两部分为:(ip,port),即IP地址和port端口号,比如一个网络地址为192.168.130.55:8000,

该ip地址用于区分计算机,而端口号8000用于区分不同的套接字。

2.通用socket地址

socket地址用一个结构体标示,sockaddr头文件以及结构如下:

#include

struct sockaddr

{

sa_family_t sa_family;/*地址族类型,本教程使用AF_INET,代表TCP/IPv4协议族/

char sa_data[14]; /*14字节,存放socket地址值,ip地址和端口号*/

};

sockaddr是通用socket地址,但一般不直接用这个结构体,因为用的会蛋疼,14字节地址还得自己填充,自己填充ip地址和端口号会很麻烦,一般使用sockaddr_in结构体。但是很多网络编程API的参数是通用地址结构struct sockaddr,使用这些API的时候将sockaddr_in进行类型强制转换为sockaddr即可。

3.专用socket地址

sockaddr_in头文件以及结构如下:

#include

struct sockaddr_in

{

sa_family_t int sin_family; /* 地址族,同sockaddr */

unsigned short int sin_port; /* 2字节端口号,网络字节序表示 */

struct in_addr sin_addr; /* 4字节IP地址,见下,网络字节序表示 */

unsigned char sin_zero[8]; /* 8字节,未使用 */

};

struct in_addr

{

u_int32_t s_addr; /* 4字节即32位IPv4地址,网络字节序表示 */

}

如上所示,最大的变化是将14字节拆分 为2字节(端口号)+ 4字节(ip地址)+ 8字节(空闲未使用,保证sockaddr_in和sockaddr内存对齐),这样进行拆分后,极大的方便了用户的使用。

linux网络编程socket,Linux网络编程入门相关推荐

  1. linux套接字端口,多端口监听套接字linux(multiport listening socket linux)

    多端口监听套接字linux(multiport listening socket linux) 我正在用C(linux)编写一个多线程服务器应用程序,它必须监听2个不同的端口号,例如监听端口号3000 ...

  2. linux 非阻塞 socket,linux 非阻塞式socket编程求助。。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一下客户端: #include #include #include #include #include #include #include #includ ...

  3. linux 协议栈之socket,Linux TCP/IP 协议栈之 Socket 的实现分析(一)

    内核版本:2.6.37 参考[作者:kendo的文章(基于内涵版本2.6.12)] 第一部份 Socket套接字的创建 socket 并不是 TCP/IP协议的一部份. 从广义上来讲,socket 是 ...

  4. linux 协议栈之socket,Linux协议栈之BSD和INET socket层(一)

    Linux的BSD和INET  socket层分别对应于ISO的表示层和会话层,其中有两个比较重要的数据结构: struct socket { socket_statestate; unsigned ...

  5. [linux] Linux网络之Socket编程入门

    目录 1. 前言 2. 网络基础 2.1 协议 2.1.1 TCP和UDP协议 2.2 网络的层状结构 2.3 一台主机向另一台主机的发送数据的流向 2.4 IP和MAC地址 2.5 端口 2.6 网 ...

  6. python在线编程平台-python在线编程

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python并发编程的思维导图,原始文件请转到:processon链接查看 ? i ...

  7. Linux网络编程(Socket)

    目录 网络编程(Socket)概述 引入 网络编程通识扫盲 socket套接字 套接字描述符 字节序 socket编程步骤 Linux提供的API简析 创建套接字即连接协议[socket](服.客) ...

  8. Linux学习之----socket网络编程基础

    分层模型 OSI七层模型 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后再转 ...

  9. 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/c++linux服务器开发

    深入分析websocket协议,从3个方面设计网络应用层协议 视频讲解如下: 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/ ...

最新文章

  1. 【周鸿祎:当下AI技术并不完善,存四大“冰点”】
  2. Leetcode 18. 四数之和 (每日一题 20211011)
  3. Codeforces 1326F Wise Men (容斥原理、状压 DP、子集和变换、划分数)
  4. 记录 之 tf.placeholder() 函数的意义及用法
  5. Codeforces 839B - Game of the Rows
  6. bs 网站获取电子秤重量方案
  7. spark学习之SparkSQL
  8. pytorch训练过程中内存一直慢慢增长直到爆
  9. 软件测试计划模板--云闪付平台
  10. 售后服务场景智能调度解决方案
  11. 优盘格式化为FAT64
  12. oracle删除大量数据
  13. c 语言指针数组长度,c如何获取指针数组的长度?
  14. 运维工程师必备Linux常见安全策略与实践
  15. TP5中 save操作 不能foreach循环操作 循环就只有最后一次有效 解决方案
  16. mac苹果下载VSCode最全步骤
  17. 重置并,修改MySql密码
  18. 对比学习的一个原则3个关键点
  19. 微信JS-SDK坐标位置转换为百度地图坐标
  20. Java开源项目(备查)

热门文章

  1. lp3676 小清新数据结构题
  2. 英国科学家研究用AI预测地震:未来或提前一周预报
  3. 香港政府活用无人机,正式应用到调研检测领域
  4. .NET 中String类功能分类概述
  5. 学习笔记--2014年7月7日
  6. 我的log4net使用手册(转自 http://blog.csdn.net/lyjcn/archive/2009/08/11/4432833.aspx)
  7. 如何学习HTML语言
  8. 三十、详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack
  9. Java华丽转身 —— GUI编程宝典
  10. 在竞争激烈的ToB公司,这个创始团队拒绝一夜暴富,坚持做好产品