Python网络编程-TCP(基于socket)

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连接的超时时间。

TCP

2.TCP服务器搭建
#Authors:xiaobei

######搭建服务器######
import socket
#创建一个socket
#socket.AF_INET表示IPv4协议,socket.SOCK_STREAM代表流式传输
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定IP端口,这里IP就不公布了,大家用自己的IP
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客户端创建
#Authors:xiaobei

######创建客户端######
import socket
#创建一个socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#创建链接
#参数:参数是一个元组,第一个元素为要链接的IP地址,第二个元素为端口
client.connect(("***.***.***.*",8080))
print("链接成功")
while True:
    data = input("请输入发送给服务器的数据:")
    if data=="0":
        #断开连接
        client.close()
        print("已断开链接……")
        break
    #发送数据
    client.send(data.encode("utf-8"))
    print("发送成功!")
    #接收数据(每次接受1K数据量)
    answer = client.recv(1024)
    print("服务器响应数据:",answer)
4.本机IP查找

打开cmd,输入“ipconfig",可以得到本机的IP。

>>>ipconfig

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值