乐趣区

关于python:简单理解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()

退出移动版