Python网络编程(三):TCP编程

在这里插入图片描述

TCP编程

Socket是网络编程的一个抽象概念,通常我们用一个Socket表示打开了“网络连接”,而打开一个Socket需要知道目标计算机的IP地址,进程端口号,以及需要指定协议类型……


【1】客户端

网络通信中的大多数连接都是可靠的TCP连接,创建TCP连接时,主动发起连接请求的是客户端,被动响应的是服务端

例:当用户通过浏览器访问搜狐服务器时,用户的计算机就是客户端,浏览器会主动向搜狐的服务器发送连接请求。若服务器接受,则一个TCP连接就建立起来了,后面的通信就是发送网页内容

建立连接
在这里插入图片描述

  • AF_INET:使用IPv4协议
  • AF_INET6:使用IPv6协议
  • SOCK_STREAM:指定使用面向流的TCP协议
  • 80:端口号,对应TCP
  • 小于1024的端口号:标准网络端口号
  • 大于1024的端口号:可以随意使用

发送请求
在这里插入图片描述
TCP连接建立的是双向通道(全双工),故双方都可以同时向对方发送数据,接收数据。至于发送的先后顺序,需要依照具体的协议而定

例:HTTP协议必须是客户端先发送请求,服务器收到后才能发送数据

接受服务器返回的数据
在这里插入图片描述

  • recv(max:指定一次最多接收的字节数
  • 循环接收数据,直到数据为空

关闭连接

s.close()

客户端完整代码
在这里插入图片描述


【2】服务端

TCP与服务器的一个进程端口连接,那么首先服务器的进程需要先绑定一个端口,并监听(listen)来自客户端的连接请求。当某个客户端的连接请求过来了,服务器就与该客户端建立Socket连接,之后就利用这个Socket连接进行通信

一个服务器会有大量来自客户端的连接,服务器要能够区分一个Socket连接是和哪个客户端绑定的

服务器通过以下四项确定一个Socket连接是与哪个客户端绑定的

  1. 服务器地址
  2. 服务器端口
  3. 客户端地址
  4. 客户端端口

由于服务器需要同时响应多个客户端的请求,所以每个连接都需要一个新的进程/线程来处理

在这里插入图片描述

  • s.bind():绑定监听的地址和端口

可以绑定到某个网卡的IP地址上,也可以用0.0.0.0绑定到所以的网络地址
127.0.0.1是本机地址

  • 服务器通过一个永久循环接收来自客户端的连接
  • 每个连接都要创建一个新的进程/线程处理

【3】实验

用两个命令窗口,分别运行server.pyclient.py模拟一个TCP通信过程

在这里插入图片描述


【4】小结

  • 客户端:要主动连接服务器的IP地址指定端口
  • 服务端
    • 监听指定端口(listen)
    • 每一个新的连接都要通过一个进程/线程处理

同一个端口被一个Socket绑定后,就不能被其他Socket绑定了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值