美文网首页
Socket学习

Socket学习

作者: jinjin1009 | 来源:发表于2021-06-22 11:40 被阅读0次

一、正常的TCP/IP协议关系

image.png
可以看到,协议主要包括链路层、网络层、传输层、应用层

二、Socket所处位置

image.png
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通信。

三、Socket通信具体过程

image.png
服务器端:服务器端先初始化Socket,然后与端口绑定bind,对端口进行监听listen,调用accept阻塞,等待客户端连接。在这时如果有一个客户端初始化Socket,然后连接服务器connect,如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
# socket_server.py 服务端
import socket

# 建立一个服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 1234
# 绑定要监听的主机和端口号
server.bind((host, port))
# 开始监听,可以使用五个链接排队
server.listen(5)

while True:
    # conn 就是客户端链接过来在服务端生成的一个链接实例
    conn, addr = server.accept()
    print('链接地址为:{}'.format(addr))

    while True:
        try:
            # 接收客户端发送过来的数据
            data = conn.recv(1024)
            print('server recive:{}'.format(data.decode()))
            # 向客户端发送数据
            conn.send(data.upper())
        except ConnectionResetError as e:
            print('关闭了正在占线的链接')
            break
    # 接收客户端的连接关闭要求,关闭连接
    conn.close()
# socket_client.py 客户端
import socket

client = socket.socket()
host = socket.gethostname()
port = 1234
# 连接服务端
client.connect((host, port))

while True:
    msg = 'welcome to cai niao'
    # 向服务端发送数据
    client.send(msg.encode('utf-8'))
    # 接收服务端的数据
    data = client.recv(1024)
    print('client recv:{}'.format(data.decode()))

client.close()

相关文章

  • 网络编程

    python学习笔记-网络编程 socket编程: socket()函数:socket.socket([famil...

  • #Socket回顾学习笔记

    Socket学习笔记 Socket基础知识 背景 Socket概念 Socket 又称"套接字",是系统提供的用于...

  • iOS#GCDAsyncSocket使用

    背景 最近在开发使用Socket,重新复习了socket基本知识,文章如下: #Socket回顾学习笔记UDP G...

  • HTTPS的理解

    1.Socket?后学习---------------------------------------------...

  • iOS_环信

    对于环信(即时聊天)分为三个方面学习: 1,Socket的网络通信,Socket相关难点理解(详见——Socket...

  • socket学习

    参考书籍《python核心编程第二版》 原文由于采用python2的版本,所以input函数采用的是raw_inp...

  • Socket学习

    一、 Socket介绍 来由:多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不...

  • Socket学习

    一、什么是Socket编程 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的...

  • Socket学习

    socket是网络间进程通信的一种实现方式。 下图就是socket的原理图。 那么socket在哪里呢?又是服务于...

  • socket学习

    一、什么是socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket ...

网友评论

      本文标题:Socket学习

      本文链接:https://www.haomeiwen.com/subject/nhipyltx.html