Python学习笔记-Day30-socket套接字

内容大纲

一、C/S架构和B/S架构

二、socket套接字及在python中的应用

 

 

一、C/S架构和B/S架构

B/S架构:Browser/Server,浏览器端和服务端架构,通过浏览器访问服务器,例如百度等。B/S是趋势,能够统一程序的入口,例如微信小程序

C/S架构:Client/Server,客户端与服务器端架构,通过客户端访问服务器,例如qq客户端、微信客户端等,BS架构也是一种CS架构

 

二、socket套接字

1、什么是套接字?

socket是应用层和TCP/IP协议族通信的中间软件抽象层,它是一组接口。

站在我们的角度,socket就是一个模块,我们通过调用模块中的方法建立两个进程之间的链接和哦通信。

也有人认为socket就是ip+port,ip用来标识互联网中主机的位置,port用来标识这台机器的应用程序的位置,所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块与之通信。

基于文件类型的套接字家族:AF_UNIX

基于网络类型的套接字家族:AF_INET

 

 三、基于TCP协议的socket

tcp是基于链接的,必须先启动服务器端,然后在客户端去链接服务器端

server端的代码:

import socket
sk = socket.socket() # 实例化一个socket对象
sk.bind(('127.0.0.1',8056))  # 把地址绑定到套接字
sk.listen()  # 监听链接 ,括号里可加允许的阻塞数量,默认为无数,py3.4之前一定要加数量
conn,addr = sk.accept()  # 接收客户端的链接,与客户端的connect组成三次握手
conn.send('msg'.encode('utf-8'))  # 发送消息给客户端,消息必须是bytes类型
msg = conn.recv(1024)  # 接收客户端的消息,括号里是允许接收的最大的字节数
conn.close()  # 关闭与客户端的链接
sk.close()  # 关闭服务器,通常不会关闭服务器

client端的代码

import socket
sk = socket.socket()  # 实例化一个socket对象
sk.connect(('127.0.0.1',8056))  # 尝试链接服务器
sk.send('msg'.encode('utf-8'))  # 发送消息
msg = sk.recv(1024)  # 接收消息
print(msg.decode('utf-8'))
sk.close()  # 关闭客户端的套接字

 

四、基于UDP的socket

udp是无链接的,启动服务器之后可以直接接收消息,不需要提前建立链接

server端的代码:

import socket
udp_sk = socket.socket(type=socket.SOCK_DGRAM)
udp_sk.bind(('127.0.0.1',9000))  # 绑定服务器套接字
msg,addr = udp_sk.recvfrom(1024)  # 接收客户端的消息和地址
udp_sk.sendto('msg'.encode('utf-8'),addr)  # 发送消息给客户端
udp_sk.close()  # 关闭服务器套接字

client端的代码:

import socket
udp_sk = socket.socket(type=socket.SOCK_DGRAM)  # 实例化一个对象
udp_sk.sendto('hello'.encode('utf-8'),('127.0.0.1',9000))  # 发送消息
msg,addr = udp_sk.recvfrom(1024)  # 接收消息
udp_sk.close() # 关闭

 

posted @ 2018-09-13 16:26  whuitian  阅读(152)  评论(0编辑  收藏  举报