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,因此服务器可以通过返回数据的长度来区别客户端是否已经下线。

相关文章
|
24天前
|
缓存 网络协议 Java
【JavaEE】——TCP回显服务器(万字长文超详细)
ServerSocket类,Socket类,PrintWriter缓冲区问题,Socket文件释放问题,多线程问题
|
3月前
|
域名解析 网络协议 数据库
TCP/IP服务器
【10月更文挑战第20天】TCP/IP服务器
138 65
|
3月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
84 2
|
3月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
93 1
|
3月前
|
网络协议 Python
Python创建一个TCP服务器
Python创建一个TCP服务器
32 0
|
5月前
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!
|
4月前
|
网络协议 数据处理 C语言
利用C语言基于poll实现TCP回声服务器的多路复用模型
此代码仅为示例,展示了如何基于 `poll`实现多路复用的TCP回声服务器的基本框架。在实际应用中,你可能需要对其进行扩展或修改,以满足具体的需求。
107 0
|
5月前
|
网络协议 安全 架构师
详解 | 一台服务器最大能支持多少条TCP连接?
详解 | 一台服务器最大能支持多少条TCP连接?
105 0
|
8月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
152 4
|
监控 网络协议 网络架构
IP协议【图解TCP/IP(笔记九)】
IP协议【图解TCP/IP(笔记九)】
173 0