python----网络编程-socket编程

网络编程:实现计算机与计算机间的通信

有以下几种形式:
tcp:可靠,有状态的,长连接的协议,像打电话一样
udp:不可靠,无连接,像发短信一样。发送的包的顺序要有编号
http:基于tcp的协议

一.学习socket一定要先学习互联网协议:

1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件

2.其次:C/S架构的软件(软件属于应用层)是基于网络进行通信的

3.然后:网络的核心即一堆协议,协议即标准,你想开发一款基于网络通信的软件,就必须遵循这些标准。

4.最后:就让我们从这些标准开始研究,开启我们的socket编程之旅
注释 :C/S就是客户端和服务端
这里写图片描述
TCP/IP协议族包括运输层、网络层、链路层

二、socket是什么

  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
注:1 将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序.而程序的pid是同一台机器上不同进程或者线程的标识(Google Chrome会有多个PID)

Socket是介于应用层和传输层之间。
这里写图片描述

三.套接字工作流程

生活中的场景,你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。

生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定。
这里写图片描述
这里写图片描述

实例1.socket模块发送和接收消息

注释:先创建两个py文件

tcp服务端(server)

#usr/bin/python
#-*-coding:utf-8-*-
#Socket 通信 创建一个服务端


import socket
#1.先创建服务端
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.绑定IP端口
server.bind(('192.168.32.1',8888))
#2.5设置最大连接数5
server.listen(5)
print('服务端启动,等待客户链接...')
#3.等待客户端连接 如果有链接 将返回一个连接对象额对方的地址
conn,address=server.accept()
while True:
#4.接受客户端发过来 多大字节的数据
    msg=conn.recv(1024)
    print('客户端回复:',msg.decode())#把接收到的bytes转出去
#5.给客户端回复数据
    conn.sendall(input('服务端:').encode('utf-8'))
#6.结束了
conn.close()
server.close()

tcp客户端(client)

#usr/bin/python
#-*-coding:utf-8-*-

import socket
#1.创建客户端
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.建立链接
client.connect(('192.168.32.1',8888))
#3.发送消息 格式:以utf-8的字符集转为bytes
print('客户端 成功连接服务器  n 结束:')
while True:
    msg=input('客户端: ')
    if msg.__eq__('n'):break
    client.send(msg.encode('utf-8'))
    #4.等待回复 并读取回复
    msg=client.recv(1024)#1024为字节数
    print('服务器: ',msg.decode())#把接收到的bytes转出去回去
#5.关闭连接
client.close()

tcp服务端执行得

服务端启动,等待客户链接...

tcp客户端(执行得

客户端 成功连接服务器  n 结束:
客户端: 你好

然后就实行简单的对话,每次只能发送一条,服务端回复后才能再次发送.

猜你喜欢

转载自blog.csdn.net/weixin_42067855/article/details/80544820