套接字socket--概念和实例

Linux内核--网络协议栈(一)Socket通信原理和实例讲解 本章开始进入linux内核中网络部分的学习,先简单介绍一下socket套接字 阅读详情

套接字 socket

 

套接字概念

套接字是一种进程间通信的方法,不同于以往介绍的的进程通信方法的是,它并不局限于同一台计算机的资源,例如共享内容或者消息队列。

一台机器上的进程可以使用套接字与另一台机器上的进程通信。因此客户与服务器可以分散到网络中。

同一台机器的进程间也可以用套接字通信。

 

套接字的工作过程(服务器端)

首先,服务器应用程序通过socket系统调用创建一个套接字,它是系统分配给该服务器进程的类似文件描述符的资源,不能与其他进程共享。

其次,服务器进程使用bind系统调用个套接字命名。

接下来,服务器进程开始等待客户连接到这个命名套接字,调用listen创建一个等待队列,以使存放来自客户的进入连接。

最后,服务器通过accept系统调用来接受客户的连接。此时,会产生一个与原有的命名套接字不同的新套接字,它仅用于与这个特定的客户端,而命名套接字则被保留下来继续处理来自其他客户的连接。

 

套接字的工作工程(客户端)

调用socket创建一个未命名套接字,将服务器的命名套接字作为一个地址来调用connect与服务器建立连接。

一旦建立了连接,就可以像使用底层文件描述符那样来用套接字进行双向的数据通信。

 

套接字的属性

套接字的特性由三个属性决定:

域(domain):指定套接字通信中使用的网络介质,包括地址格式。

  • AF_INET,即互联网络,基于IP协议,并且每个对应一个端口号,套接字地址由IP地址+端口号决定

类型(type)

  • 流套接字:由类型SOCK_STREAM指定,基于TCP/IP实现,提供一个有序、可靠、双向字节流的连接,发送的数据不会丢失、乱序、重复。大的消息会被分块、传输、重组,很像一个文件流。
  • 数据报套接字:由SOCK_DGRAM指定,基于UDP/IP协议,不建立和维持可靠连接,开销小,服务器崩溃不需要客户端重启,因为基于数据报的服务器不保留连接信息

协议(protocol)

 

 

套接字举例

客户端程序:创建一个未命名的套接字,然后把它连接到服务器套接字server_socket上,向服务器写一个字符,再读回经服务器处理后的一个字符。

服务器端程序:首先创建一个服务器套接字,绑定一个名字,然后创建一个监听队列,接收来自客户程序的连接。

client1.c

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/un.h>
#include <unistd.h>

int main()
{
	int sockfd;
	int len;
	struct sockaddr_un address;
	int result;
	char ch = 'A';
	sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
	//根据服务器的情况设定连续地址
	address.sun_family = AF_UNIX;
	strcpy(address.sun_path, "server_socket");
	len = sizeof(address);

	result = connect(sockfd, (struct sockaddr *)&address, len);
	if (result == -1)
	{
		perror("oops:client1");
		exit(1);
	}
	write(sockfd, &ch, 1);
	read(sockfd, &ch, 1);
	printf("char from server = %c\n", ch);
	close(sockfd);
	exit(0);
}

server1.c

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>

int main()
{
	int server_sockfd, client_sockfd;//定义套接字标识符
	int server_len, client_len;//地址长度
	struct sockaddr_un server_address;
	struct sockaddr_un client_address;
	unlink("server_socket");//如果当前目录有叫做server_socket的文件,则删掉
	server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);//采用字节流方式,默认协议
	server_address.sun_family = AF_UNIX;
	strcpy(server_address.sun_path, "server_socket");
	server_len = sizeof(server_address);
	bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
	listen(server_sockfd, 5);//创建长度为5的监听队列
	while(1)//等待客户端连接的到来
	{
		char ch;
		printf("server waiting\n");
		client_len = sizeof(client_address);//获取客户端的地址长度
		//服务器进程阻塞自身,知道有客户端请求建立连接,此时生成一个新的套接字,并返回新套接子的描述符,用此新套接字与客户进行通信
		client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
		read(client_sockfd, &ch, 1);
		ch++;
		write(client_sockfd, &ch, 1);
		close(client_sockfd);
	} 
}

 

网络套接字实例20个 网络实例的源码大部分用的是套接字的编程,对于初学者学习网络编程非常有帮助 立即下载

相关推荐

STM32H743必要外围电路分析

写在前面:这篇博客是我第一次绘制STM32最小系统板的过程记录。 2020-1-11 BOOT STM32采用ARM内核,和ARM处理器一样,都有专门的boot脚决定单片机从何处启动。 在官方数据手册的第105页,我们可以看到 系统复位后,在SYSTICK的第四个上升沿锁存BOOT引脚的值,复位后,BOOT引脚可以由用户自由配置而不会影响系统正常运行。 BOOT引脚决定了自举存储器地址,当BO...

Cui_Hongwei的博客 1万+

网络编程套接字Socket(通过两个用例,逐行注释,详细理解)干活满满建议收藏

3.UDP套接字编程 1. DatagramSocket API 1.构造方法 1.DatagramSocket() 2.DatagramSocket(int port) 2.常用方法 1.receive(DatagramPacket p) 2.send(DatagramPacket p) 2. DatagramPacket API 1.构造方法 1.DatagramPacket(byte[] buf,int length) 2.DatagramPacket(byte[] buf,int offset,in

qq_55546526的博客 2153

基于openEuler配置LAMP,部署WordPress

openEuler 基于OpenEular操作系统部署WordPress,必须包含以下内容: OpenEular的安装与基本配置。 基于SSH远程管理方式开展操作。 部署LAMP环境。 部署WordPress软件。 提供个人网站服务,并通过浏览器测试应用。 简要讲授相关知识与原理。 cd /etc/yum.repos.d 欧拉系统安装后,没有配置yum源,我们需要重新配置。 [root@localhost yum.repos.d]# ls -l 总用量 4 -rw-r--r--

Axiayouqiaomu的博客 6081

Python Socket (套接字)详细解释以及简单的小例子

什么是 Socket? Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) family: 套接字家族可以使AF_UNIX或者A...

成熟的小孩的博客 1万+

Netapp FAS2750热备盘替换失败问题分析与解决

本文深入分析了Netapp FAS2750存储系统中热备盘替换失败的故障现象,揭示了磁盘分区属主不匹配导致数据同步无法启动的根本原因。通过详细的排查步骤和解决方案,帮助运维人员快速恢复aggr状态,并提供了长期预防措施和最佳实践建议,确保存储系统的高可用性。

weixin_33737774的博客 399

从零到一:手把手教你用海康VisionMaster完成第一个字符识别项目(附完整流程与避坑点)

本文详细介绍了如何使用海康VisionMaster完成首个字符识别项目,涵盖从环境搭建、图像预处理到系统集成的完整流程。特别分享了Blob分析配置、字符识别优化等实战技巧,帮助开发者避开常见陷阱,快速掌握VisionMaster的基本操作,提升工业自动化场景下的字符识别效率。

weixin_29313423的博客 664

网络编程套接字

之前说了多路转接,那么今天我来谈谈我对网络编程套接字的理解。 初识ip地址和端口号 ip地址 ip地址有两个版本:ipv4和ipv6,我在这里介绍ipv4: 1.ip地址是在ip协议中,用来标识网络中不同主机的地址,它分为两部分: 2.对于ipv4来说,ip地址是一个4字节32位的整数; 3.人们通常用点分十进制的字符串表示ip地址,比如127.0.0.1(每一个用点分隔的数字代表...

来信 410

那些年对支付宝的研究[整理]

支付宝功能强大.他内部各个功能间的跳转是通过Uri 实现的.而使用window.location.href 即可.跟浏览器一样的协议.很方便 H5启动支付宝: alipays://platformapi/startapp?appId=20000067&url=网址 alipays://platformapi/startapp?appId=20000691&url=网址 ali...

技术专研 8915

嵌入式linux入门3-3-套接字

个人博客对应地址:嵌入式linux入门3-3-套接字 socket主要函数 创建套接字 socket,我们一般翻译为套接字,其是一种通讯接口,允许位于不同计算机之间的线程通过网络进行通讯,我们可以使用socket系统调用来创建一个socket接口,此函数会返回一个定位此接口的文件描述符。 /** * 创建一个socket接口,并返回它的描述符,返回-1表示失败 * * domain参数用于指定接口使用的通讯域(communication domain),其支持AF_xxx形式的一组宏定义, * 对

Codinglover 3841

【系统移植】 移植主线U-Boot(v2024.01-rc3)到RK3399

[系统移植] 移植主线U-Boot(v2024.01-rc3)到RK3399

Systemcall名屋 1003

rk3576 适配以太网(百兆)

百兆以太网,也常被称为快速以太网,是一种在1990年代中期推出的计算机网络技术标准。它相当于把当时主流的10兆以太网速度提升了10倍,最高能提供 100 Mbps 的传输速率,让文件共享、视频传输等网络应用变得流畅许多。它在数据链路层面完全保留了传统以太网的帧格式和MAC机制,这意味着现有的网络软件可以无缝对接,用户从10兆网络升级到百兆网络时,通常只需要更换网卡和集线器/交换机即可,非常方便。 在rk3576平台上,原生以太网接口支持百兆、千兆,还有pcie转换的2.5G。

weixin_35723192的博客 203

计算机网络(第五弹) --- Socket 套接字详细介绍及套接字通信流程和编程的具体实现

Socket 翻译过来中文含义有(电源)插座;(电器)插口, 插孔等含义, 也就是说在电源领域, 我们将 Socket 称之为插座, 在电器领域, 我们将 Socket 称之为插孔, 那我们是不是就可以理解为在计算机通信领域, 担任插座或者插孔这个含义的 Socket 就定义成了套接字呢?

Fug_Lee的博客 2080

MAX30102心率血氧传感器原理图设计,已量产(e-Health传感器)

在最近的便携健康监测设备项目中,我们采用了集成算法的 MAX30102 心率血氧模块 —— 这类带内置 MCU 算法的传感器能直接输出心率 / 血氧数值,大幅降低了主控资源占用。但硬件电路的稳定性直接决定了 PPG 信号的采集精度,下面结合实际项目里的原理图,拆解下这个模块的设计细节。

不脱发的程序猿 1277

[Linux网络编程]Socket套接字

socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。本文归纳整理Socket的使用

weixin_44972997的博客 3671

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

网络原理——套接字的概念和应用

一、什么是套接字 套接字是一种软件抽象,用于表示两台机器之间的连接终端,套接字(Socket)大致位于OSI模型的会话层、TCP/IP模型的应用层,每一台机器都有一个套接字,可以想象成套接字是机器的端口,他们之间都有一条虚拟的电缆,电缆的每一段都插入到套接字中,也就是说一台机器上的套接字可以和另一台机器上的套接字组成一条通信通道,我们可以用这个通道在两台机器之间发送数据。 二、UDP套接字——D...

qq_45036591的博客 3797

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

网络套接字编程(socket 详解)

socket 编程 套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。 在T...

zhangxu 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

网络编程套接字(socket)

请求和响应、Socket套接字、TCP/UDP的区别、DatagramSocket、DatagramPacket、InetSocketAddress、ServerSocket、Socket、回显服务器实例、多线程、线程池、长短连接

Yuan_o_的博客 1120

套接字(socket)编程简介

套接字(socket)编程简介 现在的网络编程几乎都是用的socket。 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信? 这些都得靠socket!那什么是socket?下面介绍一下socket的相关概念和一些基本函数。 套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。 既然是文件

qq_43169752的博客 2508

[python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,Python网络编程也类似。同时最近找工作笔试面试考察Socket套接字、TCP\UDP区别比较多,所以这篇文章主要精简了《Python核心编程(第二版)》第16章内容。内容包括:服务器和客户端架构、套接字Socket、TCP\UDP通信实例和常见笔试考题。文章有详细的原理及代码和运行结果,希望文章对你有所帮助,如果有不足之处,还请海涵~

杨秀璋的专栏 1万+

详解什么是 socket、套接字、“插座”!

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。     你知道插座吗?你知道网络编程中的插座吗?也许你会有点迷惑,什么是插座!但是我如果说出“套接字”、“socket”这样的关键字你就会恍然大悟。     所谓的“插座”叫做套接字又叫做socket,用来表示一个端点,可以与网络中其他的socket进行连接,然后进行数据的传输。     我们都知道在网络上中可以通过IP地址确定唯一的一台主机,然后主机和主机之间进行通讯。但是准确来说:网络通讯中的双方并不是主机,而是主机中的

MonkeyBrothers的博客 1615

Linux——socket套接字与udp通信

接受消息放到buf里,预期接受len个字节的消息,flags默认为0,代表的阻塞模式,src_addr与addrlen为输入输出参数,输出发送放相关sokect消息。有了文件描述符,还需要填充sockaddr_in结构体里面的字段,sockaddr 是一个通用的套接字地址结构体,而sockaddr_in则专门为网络socket设计的,他是用于IPv4套接字的地址结构体。所有数据具在发送到网络时,都必须要做小端到大端的转化,你是大端,直接发给网络就可以,你是小段,先转化完再发给网络。

kkbca的博客 1576

Socket网络编程——(一)

一、什么是Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接.的一端称为一个socket。端点由IP地址和端口号共同组成,简单的说它是IP地址和端口结合的协议。 常用的套接字 流式套接字:流套接字用于提供面向连接、可靠的数据传输服务,该服务将保证数据能够实现无差错、无重复发送,并按顺序接收(基于TCP)。 数据报套接字:数据报套接字提供了一种无连接的服务。该服务并不能保证...

start_mao的博客 1万+

【JavaEE】网络编程与socket套接字

文章目录一、网络编程1.什么是网络编程2.网络编程的相关概念二、socket套接字1.概念2.socket套接字分类3.UDP数据报套接字编程4.TCP流套接字编程三、预告 一、网络编程 1.什么是网络编程 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。   我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。   特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。  

weixin_46913665的博客 792

13.Win下socket编程(笔记)

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进行进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。简单来说,套接字是人们抽象出来的一个概念,它其实就是应用程序通过网络协议来进行通讯的接口。UDP。

C++方向学习笔记 1199

【Linux网络编程】网络基础 和 socket套接字 服务器与客户端 详细案例说明

本文详细介绍了Linux内核编程之网络基础和SOCKET套接字 详细以服务器客户端搭建展开讲解,希望对正在学习的同学有所帮助!

持续学习,持续进步! 2350

Socket 套接字

什么是Socket Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 Socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的Socket系统调用。客户随机申请一个Socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个Socket号;服务...

Hello LinWoW~ ⊙o⊙ 214
上一篇: 图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
下一篇: 套接字socket---接口函数
mainn
博客等级 码龄10年 865粉丝 447原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值