文章目录
TCP网络编程实战1.TCP数据传输流程2.TCP服务器搭建3. TCP客户端创建4.本机IP查找
TCP网络编程实战
基于socket库,socket是Python3的标准库。搭建一个简易的服务器与客户端,让他们之间做简单的数据交互。
1.TCP数据传输流程
TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。
建立TCP连接需要经过三次握手:
1.主动端先发送SYN报文 2.被动放回应SYN+ACK报文 3. 然后主动端再回应ACK
TCP的一项功能就是确保每个数据段都能到达目的地。位于目的主机的TCP服务对接受到的数据进行确认,并向源应用程序发送确认信息。
在主动端发送SYN后,如果被动端一直不回应SYN+ACK报文,主动端会不断的重传SYN报文直到超过一定的重传次数或超时时间。在主动端发送SYN后,被动端回应SYN+ACK报文,但主动端不再回复ACK,被动端也会一直重传直到超过一定的重传次数或超时时间。(SYN报文攻击会出现这种情况)可以通过以下命令配置SYN报文的超时时间(发送SYN报文到三次握手成功的最大时间),也就是建立TCP连接的超时时间。
2.TCP服务器搭建
import socket
server
= socket
.socket
(socket
.AF_INET
,socket
.SOCK_STREAM
)
server
.bind
(("***.***.***.*",8080))
server
.listen
(5)
print("服务器已启动")
print("等待链接中……")
clientSocket
,clientAddress
= server
.accept
()
print("%s\n%s\n链接成功"%(str(clientSocket
),clientAddress
))
while True:
print("等待接收数据中……")
data
= clientSocket
.recv
(1024)
if(data
):
print("收到"+str(clientAddress
)+"的数据:"+str(data
.decode
("utf-8")))
else:
print("%s\n%s\n断开链接"%(str(clientSocket
),clientAddress
))
break
answer
= input("请输入回应客户端的数据:")
clientSocket
.send
(answer
.encode
("utf-8"))
print("发送成功!")
这里的IP地址就不公布了,为了安全考虑,这里的IP可以自己使用自己服务器的IP,或者自己电脑的IP也可以。
3. TCP客户端创建
import socket
client
= socket
.socket
(socket
.AF_INET
,socket
.SOCK_STREAM
)
client
.connect
(("***.***.***.*",8080))
print("链接成功")
while True:
data
= input("请输入发送给服务器的数据:")
if data
=="0":
client
.close
()
print("已断开链接……")
break
client
.send
(data
.encode
("utf-8"))
print("发送成功!")
answer
= client
.recv
(1024)
print("服务器响应数据:",answer
)
4.本机IP查找
打开cmd,输入“ipconfig",可以得到本机的IP。
>>>ipconfig