网络编程之socket编程(代码片段)

featherwit featherwit     2022-12-08     164

关键词:

套接字介绍

socket介绍

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

套接字介绍

套接字的概念很简单,每台主机有一个唯一的主机地址标识,同时主机内还有标识自己进程的序号id,称作端口,将这两个标识符结合就构成了一个套接字(socket),这个套接字能唯一标识网络中的一个进程。(网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket, 又称为“套接字”。)

一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。

  • 基于文件类型的套接字: AF_UNIX

   unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

  • 基于网络类型的套接字: AF_INET

         还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET

 

基于TCP协议的套接字通信

套接字工作流程

技术图片

1. 服务器先初始化Socket对象来建立一个套接字, 用这个套接字完成通信的监听。
2. 然后用bind函数来绑定一个端口号和IP地址。
3. 服务器调用listen函数对服务器的这个端口和IP地址进行监听,等待客户机的连接。
4. 客户机初始化Socket对象, 设定远程 IP 和端口。
5. 然后调用connect函数连接服务器,如果连接成功,这时客户端与服务器端的连接就建立了。
6. 服务器用accept函数来接受远程计算机的连接,建立起与客户机之间的通信。
7. 建立连接以后,客户机用write函数向socket中写入数据。也可以用 read 函数读取服务器发送来的数据。
8. 服务器用read函数读取客户机发送来的数据,也可以用 write 函数来发送数据。
9. 完成通信以后,用 close 函数关闭 socket 连接。

socket模块函数用法

import socket
socket.socket(socket_family,socket_type,protocal=0)
# socket_family 可以是 AF_UNIX 或 AF_INET。socket_type 可以是 SOCK_STREAM 或 SOCK_DGRAM。protocol 一般不填,默认值为 0。

# 获取tcp/ip套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取udp/ip套接字
udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
技术图片
服务端套接字函数
s.bind() 绑定(主机,端口号)到套接字
s.listen() 开始TCP监听
s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来

客户端套接字函数
s.connect() 主动初始化TCP服务器连接
s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

公共用途的套接字函数
s.recv() 接收TCP数据
s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
s.recvfrom() 接收UDP数据
s.sendto() 发送UDP数据
s.getpeername() 连接到当前套接字的远端的地址
s.getsockname() 当前套接字的地址
s.getsockopt() 返回指定套接字的参数
s.setsockopt() 设置指定套接字的参数
s.close() 关闭套接字

面向锁的套接字方法
s.setblocking() 设置套接字的阻塞与非阻塞模式
s.settimeout() 设置阻塞套接字操作的超时时间
s.gettimeout() 得到阻塞套接字操作的超时时间

面向文件的套接字的函数
s.fileno() 套接字的文件描述符
s.makefile() 创建一个与该套接字相关的文件
View Code

基于tcp的套接字 

 

python之socket网络编程(代码片段)

socket解释socekt又称为‘套接字’,用于描述IP和地址端口,是一个通信链路的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求。socket起源于Unix,所以也遵从“一切皆文件”的基本哲学,对于文件,... 查看详情

网络编程之黏包(代码片段)

黏包现象基于tcp协议实现的黏包fromsocketimport*importsubprocessip_port=(‘127.0.0.1‘,8888)BUFSIZE=1024tcp_socket_server=socket(AF_INET,SOCK_STREAM)tcp_socket_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)tcp_socket_se 查看详情

10.网络编程之socket(代码片段)

目录一、什么是socket?1.1套接字简介1.2套接字地址:主机-端口对二、面向连接的套接字和为无连接的套接字2.1面向连接的套接字2.2无连接的套接字三、python中socket3.1socket()模块函数3.2套接字对象(内置)方法3.3Socket中的一些参数四... 查看详情

linux--网络编程之socket(代码片段)

目录一.网络的五元组信息 二.UDP的简单特性 三.TCP的简单特性 四.网络字节序4.1主机字节序转换成网络字节序4.2网络字节序转换成主机字节序五.udpsocket编程流程5.1编程流程示意图 5.2编程流程5.2.1创建套接字5.2.2绑定地址信息5.2.... 查看详情

python之socket编程(代码片段)

一、socket简介socket(套接字)是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,将复杂的TCP/IP协议族隐藏在接口后面,让socket去组织数据以符合指定的协议。 下图左为socket在tcp/ip协议中的角色,右为socket的工作流... 查看详情

socket编程之多客服端(简易版)(代码片段)

服务端:#!/usr/bin/envpython#-*-coding:utf-8-*-importsocketimportsyssk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sk.bind((‘127.0.0.1‘,8080))sk.listen(5)whileTrue:#让服务端不停接受客户端print("开始接受请求!")conn,add 查看详情

java之socket编程(bio)(代码片段)

效果展示原理分析BIO:即阻塞型IO操作因为我们的代码中有阻塞操作的api-》accept()、read()代码展示packageBIO;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.A 查看详情

网络编程基础之粘包现象(代码片段)

一、粘包现象原理分析  1、我们先来看几行代码,从现象来分析:    测试程序分为两部分,分别是服务端和客户端    服务端.py 1#!/usr/bin/envpython32#-*-coding:utf-8-*-3#writebycongcong456importsocket78server=socket.socket(family=sock... 查看详情

java之socket编程(nio)(代码片段)

效果展示原理分析NIO:非阻塞型IO自从jdk1.4之后,增加了nio库,支持非阻塞型IO操作代码展示packageNIO;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.ServerSocketChannel;importjava.nio.channe 查看详情

python之socket编程(代码片段)

...户端:什么时候想体验服务,就去找服务端体验服务学习网络编程你就能够开发一个c/s架构的软件学习并发编程数据库前端你就能够开发一个b/s架构的软件二、OSI七层模型OSI七层协议:应用层表示层会话层传输层网络层数据 查看详情

socket编程之使用fsockopen()函数(代码片段)

fsockopen函数:初始化一个套接字连接到指定主机(hostname)get方式:client.php1<?php2//创建连接3$fp=fsockopen(‘localhost‘,80,$error,$errstr,10);45//检测6if(!$fp)7echo$errstr;die;8910//拼接http请求报文11$http=‘‘;1213//请求报文包括3部分请求行请... 查看详情

python安全攻防之socket网络编程(代码片段)

一、网络结构体系1.OSI协议是由ISO(国际标准化组织)制定的,用于提供给开发者一个必须的、通用的概念以便开发完善、可以用来解释连接不同系统的框架。OSI协议将网络体系结构划分为7层:应用层、表示层、会话层、传... 查看详情

python安全攻防之socket网络编程(代码片段)

一、网络结构体系1.OSI协议是由ISO(国际标准化组织)制定的,用于提供给开发者一个必须的、通用的概念以便开发完善、可以用来解释连接不同系统的框架。OSI协议将网络体系结构划分为7层:应用层、表示层、会话层、传... 查看详情

网络编程之socket(代码片段)

网络编程之socket看到本篇文章的题目是不是很疑惑,whatisthis?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是网络编程,什么是网络,为什么要学习socket,都在下面有... 查看详情

[linux]linux网络之socket编程入门(代码片段)

...机的发送数据的流向2.4IP和MAC地址2.5端口2.6网络字节序3.SocketAPI3.1公共接口3.2UDP接收发送数据3.3.TCP部分4.UDP及TCP的通信程序4.1UDP4.2TCP1.前言本文主要是介绍socket编程的一些接口函数,不会涉及协议的特性等等 查看详情

[linux]linux网络之socket编程入门(代码片段)

...机的发送数据的流向2.4IP和MAC地址2.5端口2.6网络字节序3.SocketAPI3.1公共接口3.2UDP接收发送数据3.3.TCP部分4.UDP及TCP的通信程序4.1UDP4.2TCP1.前言本文主要是介绍socket编程的一些接口函数,不会涉及协议的特性等等 查看详情

网络编程之socket&serversocket(代码片段)

网络编程之Socket&ServerSocketSocket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;socket用... 查看详情

网络编程之模块的使用(代码片段)

socket模块的使用1.模仿CS架构模型1.1简版服务器端importsocketserver=socket.socket()#创建一个服务器对象ip_port=(‘192.168.15.79‘,8080)#创建一个元组server.bind(ip_port)#将服务器和ip地址进行绑定server.listen(3)#设置服务器可以同时监听多少个客户... 查看详情