专栏首页咻一咻计算机专业术语-socket

计算机专业术语-socket

解释

  • 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
  • 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
  • Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

客户/服务器程序连接过程

根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 (2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 (3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

  • Socket:套接字,进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换,SocketAPI出现于1983年,4.2 BSD实现
  • Socket API:封装了内核中所提供的socket通信相关的系统调用
  • Socket Domain:根据其所使用的地址
    • AF_INET:Address Family,IPv4
    • AF_INET6:IPv6
    • AF_UNIX:同一主机上不同进程之间通信时使用
  • Socket Type:根据使用的传输层协议
    • SOCK_STREAM:流,tcp套接字,可靠地传递、面向连接
    • SOCK_DGRAM:数据报,udp套接字,不可靠地传递、无连接
    • SOCK_RAW: 裸套接字,无须tcp或tdp,APP直接通过IP包通信

示例:

在建立通信连接的每一端,进程间的传输要有两个标志:
    IP地址和端口号,合称为套接字地址socket address
        客户机套接字地址定义了一个唯一的客户进程
        服务器套接字地址定义了一个唯一的服务器进程
    套接字地址 172.18.0.18:80

套接字相关的系统调用:

名字

含义

名字

含义

socket()

创建一个套接字

bind()

绑定IP和端口

listen()

监听

accept()

接收请求

connect()

请求连接建立

write()

发送

read()

接收

close()

关闭连接

Socket通信过程示例:

下面用一段简单Python程序具体实现下:

服务器端tcpserver.py

#!/usr/bin/python
import socket                                                                          
HOST='172.18.2.232'
PORT=9527
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((HOST,PORT))
sock.listen(3)
print('tcpServer listen at: %s:%s\n\r' %(HOST,PORT))
while True:
    client_sock,client_addr=sock.accept()
    print('%s:%s connect' %client_addr)
    while True:
        recv=client_sock.recv(BUFFER)
        if not recv:
            client_sock.close()
            break
        print('[Client %s:%s said]:%s' %(client_addr[0],client_addr[1],recv))
        client_sock.send('tcpServer has received your message')
sock.close()

客户端tcpclient.py

#!/usr/bin/python
import socket
HOST='172.18.2.232'
PORT=9527
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
sock.send('hello, tcpServer!')
recv=sock.recv(BUFFER)
print('[tcpServer said]: %s' % recv)
sock.close()

执行tcpserver.py

[root@centos7 ~]#python tcpserver.py 
tcpServer listen at: 172.18.2.232:9527

172.18.2.232:46004 connect
[Client 172.18.2.232:46004 said]:hello, tcpServer!

执行tcpclient.py

[fei@centos7 ~]$python tcpclient.py 
[tcpServer said]: tcpServer has received your message

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ansible puppet saltstack三款自动化运维工具的对比!

      Puppet也许是四款工具中最深入人心的。就可用操作、模块和用户界面而言,它是最全面的。Puppet呈现了数据中心协调的全貌,几乎涵盖每一个运行系统,为各大...

    咻一咻
  • ab命令压力测试

    网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。

    咻一咻
  • 一次完整的http请求处理过程

    单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应

    咻一咻
  • python之socket初识

    本篇文章主要讲的是socket基本操作。包括网络通信三要素、TCP三次握手以及socket通信流程等。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我...

    IT苦逼一枚
  • python socket编程详细介绍

       第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

    py3study
  • 套接字socket 的地址族和类型、工作原理、创建过程

    注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为...

    s1mba
  • 5G-NSA组网参数配置

    ADD PCCFREQCFG: PccDlEarfcn=1300,PreferredPccPriority=1, PccA4RsrpThd=-105, PccA...

    用户6184845
  • Grid网格布局入门

    它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。

    javascript.shop
  • 【LEETCODE】模拟面试-108-Convert Sorted Array to Binary Search Tree

    图源:新生大学 题目: https://leetcode.com/problems/convert-sorted-array-to-binary-search-...

    杨熹
  • 在企业推行DevOps,先规划好这几件事

    企业IT建设中想要推行DevOps,第一步先做好质量内建,质量内建的方式有哪些呢?首先我们通过自动化测试、重构、简单设计等手段,可以使在编码阶段引入的缺陷变少,...

    用户7533190

扫码关注云+社区

领取腾讯云代金券