Tcp 服务器 | 学习笔记

简介: 快速学习 Tcp 服务器

开发者学堂课程【Python 入门 2020年版:Tcp 服务器 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10463


Tcp 服务器

内容介绍

一. 概念

二. 服务端代码及注释

三. 补充解释

四. TCP 注意事项

 

一.概念

TCP 服务端

在程序中,如果想要完成一个 tcp 服务器的功能,需要的流程如下:

1.socket 创建一个套接字

2.bind 绑定 ip 和 port

3.listen 使套接字变为可以被动链接

4.accept 等待客户端的链接

5.recv/send 接收发送数据

 

二.服务端代码及注释

1.代码

import socket

#创建一个 socket 连接

s=socket.socket(socket.AFINET,socket.SOCK_STREAM) s.bind(('192.168.31.199',9090))

s.listen(128) # 把 socket 变成一个被动监听的 socket

#<socket.socket fd=512,famiLy=AddressFamiLy.AF-INET, type=SocketKind.SOCK

_STREAM,proto=0,laddr=(‘192.168.31.199’ ,9090),raddr=('192.168.31.185’,38096)>('192.168.31.185', 38096))

#('192.168.31.185', 38096)

#接收到的结果是一个元组,元组里有两个元素

#第 0 个元素是客户端的 socket 连接,第 1 个元素是客户端的 ip 地址和端口号

#x=s.accept()#接收客户端的请求

client_socket,client_addr=s.accept()

#udp 里接收数据,使用的 recvfrom

data=client socket.recv(1024)# tcp 里使用 recv 获取数据

print('接收到了{}客户端{}端口号发送的数据,内容是:

{}'.format(client_addr[0],client_addr[1],data.decode(‘utf8’))

2.说明

 

三.补充解释

1.队列排队

s.listen(128) 这里的 128 相当于排队,达到服务器最大处理能力时,其他用户要在队列里面排队

当服务器的极限处理是 1000 时 有 1120 个时 120 个在排队

当服务器的极限处理是 1000 时 有 1130 个时 128 个在排队 多余的 2 个不能排队,显示连接失败

2. data=client socket.recv(1024)客户端发数据给服务器的网卡 recv(1024) 是每次读取网卡中 1024 个字节

3. 首先创建一个 socket 连接,然后写入监听功能,用 x=s.accept() 接收客户端的请求。

这时我们的 TCP 服务端是 windows,会不断等待连接,当有客户端连接时x=s.accept() 会接收到客户端的要求,接收到的结果是一个元组第 0 个元素是客户端的 socket 连接,第 1 个元素是客户端的ip地址和端口号可以把元组拆成两个变量 client_socket 表示客户端连接。

然后用 data=client socket.recv(1024)获取服务器网卡里的数据

 

四. TCP注意事项

1.tcp 服务器一般情况下都需要绑定,否则客户端找不到这个服务器。

2. tcp 客户端一般不绑定,因为是主动链接服务器,所以只要确定好服务器的 ip、 port 等信息就好,本地客户端可以随机。

3. tcp 服务器中通过 listen 可以将 socket 创建出来的主动套接字变为被动的,这是做 tcp 服务器时必须要做的。

4. 当客户端需要链接服务器时,就需要使用 connect 进行链接,udp 是不需要链接的而是直接发送,但是 tcp 必须先链接,只有链接成功才能通信。

5. 当一个 tcp 客户端连接服务器时,服务器端会有 1 个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务。

6. listen 后的套接字是被动套接字,用来接收新的客户端的链接请求的,而 accept 返回的新套接字是标记这个新客户端的。

7.关闭 listen 后的套接字意味着被动套接字关闭了,会导致新的客户端不能够链接服务器,但是之前已经链接成功的客户端正常通信。

8.关闭 accept 返回的套接字意味着这个客户端已经服务完毕

9.当客户端的套接字调用 close 后,服务器端会 recv 解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线。

相关文章
|
12月前
|
域名解析 网络协议 数据库
TCP/IP服务器
【10月更文挑战第20天】TCP/IP服务器
266 65
|
10月前
|
缓存 网络协议 Java
【JavaEE】——TCP回显服务器(万字长文超详细)
ServerSocket类,Socket类,PrintWriter缓冲区问题,Socket文件释放问题,多线程问题
|
12月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
180 2
|
12月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
160 1
|
网络协议 Python
Python创建一个TCP服务器
Python创建一个TCP服务器
108 0
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!
265 1
|
网络协议 数据处理 C语言
利用C语言基于poll实现TCP回声服务器的多路复用模型
此代码仅为示例,展示了如何基于 `poll`实现多路复用的TCP回声服务器的基本框架。在实际应用中,你可能需要对其进行扩展或修改,以满足具体的需求。
230 0
|
网络协议 安全 架构师
详解 | 一台服务器最大能支持多少条TCP连接?
详解 | 一台服务器最大能支持多少条TCP连接?
551 0
|
1月前
|
存储 缓存 数据挖掘
阿里云目前最便宜云服务器介绍:38元、99元、199元性能,选购攻略参考
轻量应用服务器2核2G峰值200M带宽38元1年;云服务器经济型e实例2核2G3M带宽99元1年;云服务器通用算力型u1实例2核4G5M带宽199元1年。对于还未使用过阿里云服务器的用户来说,大家也不免有些疑虑,这些云服务器性能究竟如何?它们适用于哪些场景?能否满足自己的使用需求呢?接下来,本文将为您全方位介绍这几款云服务器,以供您了解及选择参考。
|
2月前
|
网络安全 云计算
如何设置阿里云轻量应用服务器镜像?
本文介绍了在阿里云轻量应用服务器上创建与配置镜像的详细步骤。镜像是一种特殊的文件系统映射,可用于快速克隆服务器配置。内容涵盖准备条件、登录控制台、创建实例、生成镜像、下载与设置镜像,以及如何使用镜像启动新实例。适合希望提升服务器部署效率的用户参考。

热门文章

最新文章