socket简单学习

什么是socket??

socket是关于tcp/ip协议的一套编程api  是通用的一套规范 在很多语言中都是通用的

这里简单实现以下:

使用客户端和服务端

客户端代码:负责接受(从服务端获取数据)

import socket

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 表示常连接

# 进行连接

client.connect(("localhost",8080))

# 将 内容发送出去

# client.send("test".encode())

while True:

        data = client.recv(1024)

        # 进行传输的数据都是二进制数据

        print(data.decode())

服务端:负责发送数据

import socket

import time

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #现在是基于tcpde

# 选择监听的地址和端口

server.bind(("0.0.0.0",8080))

# 开始监听

server.listen()

# 接受连接

# 在这个地方会进行阻塞

client,addr_str = server.accept()

while True:

    # 规定接受数据的大小

    # data = client.recv(1024)

    # print(data)

    client.send("你还活着吗,大哥??".encode())

    time.sleep(2)

如图:每2秒向客户端发送一次信息。

socket基础理论

如果问  什么是socket编程???

socket编程本质上就是相应的编程语言提供的一套操作互联网的api

s.bind() 绑定(主机,端口号)到套接字

s.close() 关闭连接

s.listen() 开始TCP监听

s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来

s.connect() 主动初始化TCP服务器连接

s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

s.recv() 接收数据

s.send() 发送数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完,可后面通过实例解释)

s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)

如果是http协议的话 就是连接一次就会断掉  知道下一次申请连接才会连接 (访问网页一般就是这样)  为了减轻服务器的压力

如果是类似于网游的话就是常连接  会一直保持连接。

你可能感兴趣的:(socket简单学习)