tcp网络编程基础

tcp网络编程基础


1.tcp客户端
from socket import *

# 创建socket
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

# 目的信息
server_ip = input("请输入服务器ip:")
server_port = int(input("请输入服务器port:"))

# 链接服务器
tcp_client_socket.connect((server_ip, server_port))

# 提示用户输入数据
send_data = input("请输入要发送的数据:")

tcp_client_socket.send(send_data.encode("gbk"))

# 接收对方发送过来的数据,最大接收1024个字节
recvData = tcp_client_socket.recv(1024)
print('接收到的数据为:', recvData.decode('gbk'))

# 关闭套接字
tcp_client_socket.close()
2.tcp服务器

流程如下:
1.socket创建一个套接字
2.bind绑定ip和port
3.listen使套接字变为可以被动链接
4.accept等待客户端的链接
5.recv/send接收发送数据

代码如下:
from socket import *

# 创建socket
tcp_server_socket = socket(AF_INET, SOCK_STREAM)

# 本地信息(不写ip默认本机127.0.0.1)
address = ('127.0.0.1', 7788)

# 绑定
tcp_server_socket.bind(address)

# 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
#监听
tcp_server_socket.listen(128)

# 如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
# client_socket用来为这个客户端服务
# tcp_server_socket就可以省下来专门等待其他新客户端的链接
client_socket, clientAddr = tcp_server_socket.accept()

# 接收对方发送过来的数据
recv_data = client_socket.recv(1024)  # 接收1024个字节
print('接收到的数据为:', recv_data.decode('gbk'))

# 发送一些数据到客户端
client_socket.send("thank you !".encode('gbk'))

# 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接
client_socket.close()
3.tcp的3次握手

在这里插入图片描述

client(客户端连接connect)-------->server(服务端监听listen)--------->client(服务端告诉客户端链接已建立)---------->server(客户端告诉服务端链接已建立)
4.tcp的4次挥手
client(客户端告诉服务端要关闭链接close)
---->server(服务端告诉客户端同意关闭链接close)
---->client(服务端告诉客户端链接已关闭)
server---->client(服务端将最后的数据传递给客户端)
---->server(设置超时等待,确保最后达到关闭状态)
5.tcp长连接和短连接
  1. TCP短连接

    client 向 server 发起连接请求
    server 接到请求,双方建立连接
    client 向 server 发送消息
    server 回应 client
    一次读写完成,此时双方任何一个都可以发起 close 操作
    在步骤5中,一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。

    短连接一般只会在 client/server 间传递一次读写操作!

  2. TCP长连接

    client 向 server 发起连接
    server 接到请求,双方建立连接
    client 向 server 发送消息
    server 回应 client
    一次读写完成,连接不关闭
    后续读写操作…
    长时间操作之后client发起关闭请求

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值