套接字

ios开发 Socket通信

时光怂恿深爱的人放手 提交于 2019-12-18 13:20:21
ios开发 Socket通信 Socket描述了一个IP、端口对。它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息。所以,Socket一定包含了通信的双发,即客户端(Client)与服务端(server)。 1)服务端利用Socket监听端口; 2)客户端发起连接; 3)服务端返回信息,建立连接,开始通信; 4)客户端,服务端断开连接。 1套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。 应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了 区别不同的应用程序进程和连接 ,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应 用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。 2 建立socket连接 建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。 套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。 服务器监听:服务器端套接字并不定位具体的客户端套接字

Python网络编程之socket

岁酱吖の 提交于 2019-12-18 09:25:23
  socket是什么      Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏 在 Socket接口后面,对用户 来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 套接字发展史及分类      基于文件类型的套接字家族   套接字家族的名字:AF_UNIX   unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信   基于网络类型的套接字家族   套接字家族的名字:AF_INET   (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET 是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET)   套接字工作流程         套接字服务端   先从服务器端说起。服务器端先初始化 Socket

TCP,IP,HTTP,SOCKET区别和联系

 ̄綄美尐妖づ 提交于 2019-12-18 04:31:48
网络由下往上分为 : 对应 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- TCP协议 会话层-- 表示层和 应用层-- HTTP协议 socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据 如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍: “ 我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也 可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。 ” 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现 只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象

【Python3之socket编程】

末鹿安然 提交于 2019-12-17 21:50:06
一、socket的定义   Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 补充:也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序,而程序的pid是同一台机器上不同进程或者线程的标识 二、套接字发展史及分类   套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。 因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 基于文件类型的套接字家族 套接字家族的名字:AF_UNIX

bind函数的作用

孤者浪人 提交于 2019-12-17 11:47:37
面向连接的网络应用程序分为客户端和服务器端。服务器端的执行流程一般为4步,客户端程序相对简单,一般需要两个步骤。 服务器端执行流程4步如下: (1)调用socket函数,建立一个套接字,该套接字用于接下来的网络通信。 (2)调用bind函数,将该套接字绑定到一个地址,并制定一个端口号, (3)调用listen函数,使用该套接字监听连接请求 (4)当请求来到时,调用accept函数复制该套接字处理请求 客户端执行流程2步如下: (1)调用socket函数,创建一个套接字 (2)调用connect函数使用该套接字与服务器进行连接 服务器端和客户端程序的显著区别在于客户端程序不需要调用bind函数,bind函数的作用是将套接字绑定一个IP地址和端口号,因为这两个元素可以在网络环境中唯一地址表示一个进程。如果套接字没有使用bind函数绑定地址和端口,那么调用listen函数和connect函数的时候内核会自动为套接字绑定。由此可知,如果没有使用bind函数,调用listen函数和connect函数的时候内核会自动为套接字绑定。看起来好像bind函数是多余的,但事实并不是这样。 我们先来看看listen函数和connect是怎么绑定套接字的,connect函数绑定套接字的时候使用的是一个设置好的地址结构(sockaddr_in)作为参数,结构中指定了服务器的地址和需要通信的端口号

socket错误代码

最后都变了- 提交于 2019-12-17 07:53:52
Socket error 0 - Directly send error Socket error 10004 - Interrupted function call一个封锁操作被对 WSACancelBlockingCall 的调用中断。 Socket error 10013 - Permission denied以一种访问权限不允许的方式做了一个访问套接字的尝试。 Socket error 10014 - Bad address系统检测到在一个调用中尝试使用指针参数时的无效指针地址。 Socket error 10022 - Invalid argument提供了一个无效的参数。 Socket error 10024 - Too many open files打开的套接字太多。 Socket error 10035 - Resource temporarily unavailable无法立即完成一个非阻止性套接字操作。 Socket error 10036 - Operation now in progress 目前正在执行一个阻止性操作。 Socket error 10037 - Operation already in progress 在一个非阻止性套接字上尝试了一个已经在进行的操作。 Socket error 10038 - Socket operation on

端口状态说明 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT

徘徊边缘 提交于 2019-12-17 07:22:24
TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:CLOSE_WAIT和TIME_WAIT。 1、LISTENING状态   FTP服务启动后首先处于侦听(LISTENING)状态。 2、ESTABLISHED状态   ESTABLISHED的意思是建立连接。表示两台机器正在通信。 3、CLOSE_WAIT 对方主动关闭连接或者网络异常导致连接中断 ,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭 4、TIME_WAIT 我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。 TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。 处于TIME_WAIT状态的连接占用的资源不会被内核释放 ,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。 目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项

python socket对象内建方法

淺唱寂寞╮ 提交于 2019-12-17 04:12:58
服务器端套接字函数 s.bind() 绑定地址(主机,端口号对)到套接字 s.listen() 开始TCP 监听 s.accept() 被动接受TCP 客户的连接,(阻塞式)等待连接的到来 客户端套接字函数 s.connect() 主动初始化TCP 服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛异常 公共用途的套接字函数 s.recv() 接收TCP 数据 s.send() 发送TCP 数据 s.sendall() 完整发送TCP 数据 s.recvfrom() 接收UDP 数据 s.sendto() 发送UDP 数据 s.getpeername() 连接到当前套接字的远端的地址 s.getsockname() 当前套接字的地址 s.getsockopt() 返回指定套接字的参数 s.setsockopt() 设置指定套接字的参数 s.close() 关闭套接字 s.setblocking() 设置套接字的阻塞与非阻塞模式 s.settimeout()a 设置阻塞套接字操作的超时时间 s.gettimeout()a 得到阻塞套接字操作的超时时间 面向文件的套接字的函数 s.fileno() 套接字的文件描述符 s.makefile() 创建一个与该套接字关连的文件 来源: https://www.cnblogs.com

UDP 套接字 recvfrom & sendto

时光总嘲笑我的痴心妄想 提交于 2019-12-17 03:06:46
UDP编程中,服务器不接受来自客户端的连接,只管调用recvfrom函数,阻塞等待客户端的连接。 UDP都是以数据报的形式进行发送和接收的,而TCP是以数据流的形式进行发送和接收的。 客户服务流程结构如下: recvfrom和sendto函数 函数定义: int sendto (int s, const void *buf, int len, unsigned int flags, const struct sockaddr *to, int tolen); int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen); 函数说明: sendto(),是把UDP数据报发给指定地址; recvfrom()是从指定地址接收UDP数据报。 参数: s: socket描述符。 buf: UDP数据报 发送/接收 缓存地址。 len: UDP数据报长度。 flags: 该参数一般为0。 to: sendto()函数参数,struct sockaddr_in类型,指明UDP数据发往哪里报,手动填充对端数据。 tolen: 对方地址长度,一般为:sizeof(struct sockaddr_in)。 from: recvfrom()函数参数,struct

Socket连接与HTTP连接

北战南征 提交于 2019-12-17 02:04:07
Socket连接与HTTP连接 我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。 1)Socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等等。而TCP和UDP协议属于传输层 。 而http是个应用层的协议,它实际上也建立在TCP协议之上。 (HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。) 2)Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。 下面是一些的重要的概念,特在此做摘抄和总结。 一。什么是 TCP 连接的三次握手 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j