python socket

视频连接
https://www.imooc.com/video/17679

socket 是什么?

  • socket 是电脑网络中 进程间数据流的 端点。
  • socket 是操作系统的通信机制。
  • 应用程序通过socket进行网络的传输。

简单的TCP过程

客户端 -----> 发送SYN报文,设置随机数序号X -------->服务器

​ (SYN=1 Seq=X ACK=0)

客户端 <------- 设置SYN+ACK报文,这只随机数列号Y<---- 客户端接收到数据

​ (SYN=1 Seq=Y ACK=X+1)

客户端 -----> 发送ACK报文 设置随机***X --------> 服务器

​ ( Seq=X+1 ACK=Y+1)

服务器最后一次接收到客户端请求后,服务器和客户端形成一条通路

python socket

socket通信过程

python socket

socket通信过程 其实就是TCP通信过程

socket使用的是TCP协议


socket的通信方式

  • TCP
  • UDP

socket server

import socket
"""服务器"""
# 实例化
sk = socket.socket()
# def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):

# ip 和 端口号
ip_port = ("127.0.0.1",8888)

# 绑定监听
sk.bind(ip_port)

# 设置socket最大连接数
sk.listen(5)
# 5表示socket最大监听是5个 #1个执行,四个等待,第6个请求会被抛弃。

print("等待接收数据")

# 接收数据,阻塞状态
conn,address = sk.accept()
#连接对象,对方地址

# 定义返回信息
msg = "hello world"

#返回信息,python3发送的都是byte类型,如果发送str,需要编码
conn.send(msg.encode())

#主动关闭
conn.close()

client socket

import socket
"""客户端"""

client = socket.socket()
ip_port = ("127.0.0.1",8888)

# 连接服务器
client.connect(ip_port)

#接收主机信息
data = client.recv(1024)

# 打印接收的数据
print(data.decode())

进行连续的数据交互

import socket
"""服务器"""
# 实例化
sk = socket.socket()
# def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):

# ip 和 端口号
ip_port = ("127.0.0.1",8888)

# 绑定监听
sk.bind(ip_port)

# 设置socket最大连接数
sk.listen(5)
# 5表示socket最大监听是5个 #1个执行,四个等待,第6个请求会被抛弃。

while True:
    print("等待接收数据")

    # 接收数据,阻塞状态
    conn,address = sk.accept()
    #连接对象,对方地址

    # 定义返回信息
    msg = "连接成功"

    #返回信息,python3发送的都是byte类型,如果发送str,需要编码
    conn.send(msg.encode())

    while True:
        data = conn.recv(1024)
        print(data.decode())
        if data == b'exit':
            break

        conn.send(data)
        conn.send("hello".encode())
    #主动关闭
    conn.close()
    
    
##############################



import socket
"""客户端"""

client = socket.socket()
ip_port = ("127.0.0.1",8888)

# 连接服务器
client.connect(ip_port)

while True:

    data = client.recv(1024)
    print(data.decode())

    # 自定义发送的消息
    msg_input = input("请输入: ")
    client.send(msg_input.encode())

    if data == b'exit':

        break

    data = client.recv(1024)
    print(data.decode())
    

python socket

python socket


socket UDP

....to c