简单理解TCP套接字

套接字实际上和固定电话并无太大区别,。电话机可以同时用来拨打或接听,但对套接字而言,拨打和监听是有区别的。

描述Python用于接听的套接字创建过程

1.调用 socket函数(安装电话机)时进行的对话
  • :"接电话需要准备什么"?
  • :“当然是电话机!”
有了电话机才能安装电话,创建相当于电话机的套接字
import socket
s = socket.socket()
2. 调用bind函数(分配电话号码)时进行的对话
  • :"请问您的电话号码是多少?"
  • :"我的电话号码是123-1234"
套接字同样如此。就像给电话机分配电话号码一样(虽然不是真的把电话号码给了电话机),利用以下函数给创建好的套接字分配地址信息(IP地址和端口号)
import socket
s = socket.socket()
host = '127.0.0.1'
port = 1234
# bind 分配地址信息
s.bind((host,port))
调用 bind函数给套接字分配地址后,就基本上完成了接电话的所有准备工作。接下来需要连接电话线并等待来电
3. 调用listen函数(连接电话线)时进行的对话
  • :“已架设完电话机后是否只需要连接电话线”
  • :“对,只需连接就能接听电话”
一连接电话线,电话机就转为可接听状态,这时其他人可以拨打电话请求连接到该机。同样,需要把套接字转化为可接收连接的状态。
import socket

s = socket.socket()
host = '127.0.0.1'
port = 1234
s.bind((host,port))
# 等待来电
s.listen(5)
连接好电话线后,如果有人拨打电话就会响铃,拿起话筒后才能接听电话。
4.调用accept函数(拿起话筒)时进行的对话
  • :“电话铃响了,我该怎么办?”
  • :“难道您真不知道,拿起话筒接听啊!”
拿起话筒意味着接收了对方的连接请求。套接字同样如此,如果有人为了完成数据传输而请求连接,就需要调用以下函数进行受理
import socket

s = socket.socket()
# 处理请求
s.accept()

接受连接请求的套接字创建过程可整理如下

  • 第一步:调用socket函数创建套接字
  • 第二步:调用bind函数分配IP地址和端口号
  • 第三步:调用listen函数转为可接收请求状态
  • 第四步:调用accept函数受理连接请求

python 实现一个简单的服务器端

import socket

s = socket.socket()

host = '127.0.0.1'

port = 1234

s.bind((host, port))
s.listen(5)

while True:
    c, addr = s.accept()
    print('connection from', addr)
    c.send('hello world'.encode())
    c.close()

你可能感兴趣的:(python,tcp)