Python使用socket(上)

//

Python使用socket(上)

//

socket套接字介于tcp/ip协议的应用层和传输层之间,所以他可以控制着应用于tcp之间的通讯

以搭建一个tcp服务器为例讲解一下socket套接字

1.首先我们需要先建立一个套接字对象(默认导入了socket模块)

s = socket.socket(socket.AF_INET,socket.SOCK_STERAM)

关于socket函数有两个参数第一个参数是协议族,第二个是协议

协议族有两种,一种是AF_INET用于internet进程间的通信,另一种是AF_UNIX用于同一台机器间的通信(我们知道进程间资源是不能共享的,所以可以通过socket实现进程间资源的共享)

关于协议socket.SOCK_STREAM代表着tcp协议

socket.SOCK_DGRAM代表着udp协议

2.使用bind()方法为套接字绑定IP以及端口号

s.bind((‘127.0.0.1’,8000))

注意绑定IP和端口时IP和端口要在一起组成一个元组作为参数传入

3.使用listen()方法是套接字监听变成可被动链接

s.listen(10)

传入一个参数作为最大挂起数

4.使用accept()方法建立客户端的连接(tcp面向连接)

conn,addr = web.accept()

conn是新的套接字用于与建立连接的客户端发送以及接收消息

5.使用recv方法以及send方法接收发送消息

data = conn.recv(1024)#一次最多接收1024个byte数据

conn.send(‘hello’)#发送hello

综上我们可以得出结论如下:

建立一个tcp服务器需要先创建tcp套接字,然后在为套接字绑定ip以及端口号并设置为监听状态,最后再与客户端建立连接进行收发消息

ps:扩展(如果刚学socket可以跳过)

1.我们平常使用的套接字只是tcp/udp套接字,而套接字并不只有这两种,其实还有原始套接字,直接跳过tcp协议,自己组ip包,我们知道tcp协议以及udp协议有检查功能,但是用原始套接字就可以跳过,也就是说我们可以通过原始套接字伪造ip地址

2.关于tcp协议的四次挥手

tcp是建立在友好的连接之上的所以需要进行4次挥手,为什么是4次挥手这里我就不再做详细介绍了,这里我要提醒的是服务器一定不要先断开连接,因为先断开的一端因为最后一次握手的原因需要保留资源2MSL,而在这个期间端口会被占用,也就是说不能再去接收新的连接,造成阻塞

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190220G1C0WE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励