今天跟大家探讨下socket编程,
1:首先我们来了解下计算机网络体系结构中的通信协议OSI模型:
分别是:
应用层
表示层
会话晨
传输层
网络层
数据链路层
物理层
其中,应用层、表示层、会话层、传输层主要是面向用户,传输层主要是完成数据的传输服务
其次TCP/IP协议主要是:
应用层
传输层
网络层
数据链路层
TCP/IP协议中最著名的就是三次握手,四次分手
2:介绍下socket
socket其实就是进程间通信的一种方式,它能实现不同主机进程间的通信,比如:我们平时用的QQ、email邮件等,socket编程是基于一种客户端与服务端的编程吗模型,服务端收到客户端的连接请求,一旦连接成功,就能实现数据传输。那么我们分别来介绍下socket在服务端和客户端上的编程思路:
服务端:
步骤一:声明一个socket实例,直接使用python内置的socket模块---socket_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
步骤二:绑定一个ip地址和端口---socket_server.bind(('localhost',6969))---注意这里是一个元组的形式!!!
步骤三:开始监听---socket_server.listen()
步骤四:建立服务端和客户端之间的连接关系---conn,addr=socket.accept()
步骤五:收数据---data=conn.recv(1024)
步骤六:发数据---conn.send(data)
客户端:
步骤一:声明一个socket实例---socket_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
步骤二:开始连接地址和端口---socket_client.connect(('localhost',6969))
步骤三:发送数据---socket_client.send('b'hello world')----这里的数据内容,可以通过input方法去实时发送,这里我只是写死
步骤四:接收服务端返回的数据---socket_client.recv(1024)
具体代码见下面,这里我写的还是比较简单的一种实现形式,后续给大家来一起进阶篇:
服务端:
import socket
server1=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server1.bind(('localhost',1900))##绑定要监听的端口
server1.listen()
conn,addr=server1.accept()
data=conn.recv(1024)
print('recv:',data)
conn.send(data.upper())
server1.close()
客户端:
import socket
##1:先声明一个实例(声明socket类型,同时生成socket连接对象)
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
##2:绑定ip地址和端口号
client.connect(('localhost',1900))
client.send(b'hello world')
data=client.recv(1024)
print('recv',data)
client.close()
服务端和客户端输出分别是:
recv: b'hello world'---服务端
recv b'HELLO WORLD'---客户端
客户端收到的是大写的,原因是我把服务端发给客户端的数据做了一个大写转换的操作,谢谢