套接字编程之socket的原理

套接字编程之socket的原理

所谓套接字,其实就是socket

socket是干嘛用的呢?

当我们写一个C/S架构的软件时,是需要实现客户端与服务端之间的网络通信的,不然你的客户端怎么和服务端建立连接呢?这个socket就是负责干这个事的。

还记得OSI七层协议吗?如果是计算机科班出身的同学一定学过这个,没关系,哥带你回顾下到底什么是OSI七层协议以及这玩意有什么鸟用。

OSI七层协议(从上往下,注意数据传输时也是从应用层开始往下封包):

7.应用层 -- 567三层可以合并当作全部属于应用层,这里就是应用程序,比如QQ、微信等

6.表示层

5.会话层

4.传输层 -- TCP/UDP端口

3.网络层 -- IP地址

2.数据链路层 -- 把信号转换成二进制数0101....

1.物理层 -- 这是最底层,例如网线、光纤

那么我为什么要帮你回顾OSI七层协议呢?

这里就要引出socket的作用了,如果没有这个socket,那么我们在做网络编程时就要先搞清楚TCP/UDP的相关内容,而这部分内容极其庞杂,以我的聪明才智都搞不定,你觉得你可以?呵呵。所以你看看人家python多么厚道,人知道你搞不定,所以给你来个socket直接封装了传输层和网络层,我们在进行网络编程的时候只需要调用socket的接口函数就行了。

直接来个示例,让你见识下socket的牛逼之处。

下面我写个C/S结构的简单代码,模拟下打电话的过程,教你如何进行socket编程。

用生活中的打电话的例子来说明socket编程的步骤:

第一步:买个手机

第二步:绑定个手机卡

第三步:开机

第四步:等待一个电话连接进来

第五步:接收消息

第六步:回复消息

第七步:挂电话

第八步:关机

好了,根据上面这个思路,开始写代码:

**服务端代码:**

import socket

#实例化一个对象ipone,其中AF_INET代表基于网络类型的套接字,SOCK_STREAM代表TCP协议。

ipone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#绑定本机的IP地址和端口,注意IP和端口是放在元组中。

ipone.bind(('127.0.0.1',8080))

#listen(5)表示一个backlog<半链接池>中,意思就是允许5个客户端连接同时进来,就像手机可以同时进来两个电话

# 此处可根据实际调整数字大小

#backlog的作用很大,比如SYN洪水攻击的时候,就可以通过调大backlog的数字来预防。

ipone.listen(5)

#等待客户端发送消息,此处会等待客户端发送消息后才会往下运行程序。

conn,addr=ipone.accept()

#接收消息并赋值给变量msg,其中1024代表最大允许接收1024字节的内容。

msg=conn.recv(1024)

print('客户端发来的消息内容是:',msg)

#发送消息给客户端

conn.send(msg.upper())

#关闭conn连接

conn.close()

#关闭socket

ipone.close()

**客户端代码:**

import socket

ipone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

ipone.connect(('127.0.0.1',8080))

#把字符串转换成utf-8类型的二进制数据,客户端和服务端通信从底层来说就是传输的二进制数据。

ipone.send('hello'.encode('utf-8'))

data=ipone.recv(1024)

print('服务端发送过来的消息内容是:',data)

相关推荐

10000 韩元等于多少人民币?
beat365中国官方网站

10000 韩元等于多少人民币?

📅 07-21 👁️ 7071
优惠价是什么意思?商品促销优惠的背后逻辑及电商必备常识梳理
滴滴投资人说:为什么成功的偏偏是它
beat365中国官方网站

滴滴投资人说:为什么成功的偏偏是它

📅 08-05 👁️ 4531