socket

socket

socket通常称为'套接字',用于描述ip地址和端口,是一个通信链的句柄,应用程序通常通过'套接字'向网络发出请求或者应答网络请求.

socket起源于Unix,Unix/Linux基本哲学之一就是'一切皆文件',对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO,打开,关闭)

socket和file的区别:

  file模块是针对某个指定文件进行[打开][读写][关闭]

  socket模块是针对服务器端和客户端进行[打开][读写][关闭]

客户端: cs架构, client -> server

浏览器:bs架构, browser-> server

基于socket模块实现网络通信

  python2 ,send/recv 发送的都是字符串

  python3 ,send/recv 发送的都是字节(需要将发送的信息转换为字节)

阻塞:

  服务端:

    accept, 阻塞:等待客户端来连接

    recv,     阻塞:等待客户端发送数据

  客户端:

    connect, 阻塞:一直连接,直到连接成功才往下运行其他代码

    recv,       阻塞:等待服务端发送数据

基于TCP协议的socket

import socket
server = socket.socket()
server.bind(('192.168.13.188', 9001))
server.listen(5)
conn,addr = server.accept()
response = conn.recv(1024)
print(response)
conn.send(b'This is server')
conn.close()
TCP服务端
import socket
client = socket.socket()
client.connect(('192.168.13.188', 9001))
client.send(b'This is client.')
response = client.recv(1024)
print(response)
client.close()
TCP客户端

 基于UDP协议的socket

import socket
server = socket.socket(type=socket.SOCK_DGRAM)#创建一个服务器套接字
ip_port = ('127.0.0.1', 8000)
server.bind(ip_port)                          #绑定服务器套接字
conn, addr= server.recvfrom(1024)
print(conn.decode('utf-8'))
server.sendto('hello'.encode('utf-8'), addr)  #对话,接收与发送
server.close()                                #关闭服务器套接字
UDP服务端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1', 8000)
client.sendto('world'.encode('utf-8'), ip_port)
conn,addr = client.recvfrom(1024)
print(conn.decode('utf-8'), addr)
UDP客户端
原文地址:https://www.cnblogs.com/Virous1887/p/9578921.html