首页 > 其他分享 >TCP

TCP

时间:2023-01-12 00:44:39浏览次数:48  
标签:socket tcp client TCP 服务端 客户端

TCP

传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议

 

一.TCP的客户端和服务端

客户端:客户也就是你,客服端也就是你这一端可以接触到的程序,手机app,web网页等,我们可以在客户端的界面上向服务器发送请求以及数据,交给服务器处理
服务端:也就是提供为客户端提供“服务”,接收并储存客户端发送过来的数据或请求,并且对请求进行响应,发送数据给客户端

 

二.TCP客户端向服务端发送请求

import socket

创建tcp套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

链接需要通讯的ip和端口
tcp_socket.connect('192.168.1.1',7890)

发送数据
tcp_socket.send(b'qwer')

关闭tcp套接字
tcp_socket.close()

三.TCP服务端接收数据并返回数据

TCP服务端就是将TCP客户端改变成一个长时间接收请求的客户端


import socket


def main():
"""
1.创建TCP套接字 socket
2.绑定本地信息 bind
3.让默认的套接字由主动变为被动 listen
4.等待客户端链接 accept
5.接收数据
6.回复客户端
7.关闭服务器
:return:
"""
# 1 创建TCP服务端的套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2 TCP服务端套接字绑定本地信息
tcp_server_socket.bind(('',7890))

# 3 listen(128)==>监听的请求数
tcp_server_socket.listen(128)
print("_______________1_______________")
# 4 等待客户端链接,拆包。client_socket是与客户端新建立的一个套接字,client_Addr保存的是客户端的信息。
client_socket,client_Addr = tcp_server_socket.accept()
print("_________________2_______________")

# 5 接收客户端发送的信息
recv_data = client_socket.recv(1024)
print(recv_data.decode('utf-8'))
# 6 向客户端回复成功接收
client_socket.send('OK'.encode('utf-8'))

# 7 关闭服务端
tcp_server_socket.close()

 

if __name__ == '__main__':
main()

注意:用到两个套接字,tcp_server_scoket是创建本地服务端的套接字用来监听和接收客服端请求
client_socket是接收到客户端发送的请求,新建立的一个套接字,用来和客户端交互

 

四.服务端处理多个客户端的请求

import socket


def main():
# 创建TCP套接字
tcp_scoket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 绑定本地信息
tcp_scoket.bind(('',7890))

# 监听客户端请求
tcp_scoket.listen(128)


while True:
# 接收客户端请求
client_socket,client_Addr= tcp_scoket.accept()
print('接收到客户端请求')
while True:
# 接收客户端发送的内容
tcp_data = client_socket.recv(1024)
print(tcp_data.decode("utf-8"))
if tcp_data:
# 给客户端回复消息
client_socket.send("ok".encode('utf-8'))
else:
print("客户端结束")
break

client_socket.close()
# 关闭服务端

tcp_scoket.close()

if __name__ == '__main__':
main()

 

五.TCP之间的通讯原理

TCP客户端之间的通讯是基于TCP服务端完成的

TCP1客户端 connect(TCP服务端ip、端口) ===> TCP服务端 43.158.45.4:7788 accept()保存TCP客户端信息

TCP2客户端 connect(TCP服务端ip、端口) ===> TCP服务端 43.158.45.4:7788 accept()保存TCP客户端信息

TCP1客户端 connect(TCP服务端把TCP2的ip、端口给TCP1去链接) ==> TCP2客户端

六.TCP文件下载器

下载文件的原理:客户端向服务端发送下载请求,服务端核对下载请求,找出文件读出内容,然后向客户端发送文件内容;客户端保存文件。

客户端:
import socket

# 创建TCP客户端
tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 链接服务端
tcp_client_socket.connect(('43.458.157.4',7788))

# 向服务端发送请求
tcp_client_socket.send(b'hello')

# 接收服务端发送回来的数据
recv_data = tcp_client_socket.recv(1024) 文件大小


# 创建本地文件
file_name = input('请输入文件名')
with open(file_name,'wb') as f:
f.write(recv_data)

# 关闭套接字
tcp_client_socket.close()


服务端:
import socket

# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 绑定本地信息
tcp_server_socket.bind(('',7788))

# 监听
tcp_server_socket.listen(128)

# 接收客户端请求
tcp_client_socket,tcp_client_Addr = tcp_server_socket.accept()

# 接收客户端信息
recv_data = tcp_client_socket.recv(1024)
print(recv_data)

# 返回内容
file_data = input('请输入文件内容')

tcp_client_socket.send(file_data.encode('utf-8'))

# 关闭套接字
tcp_client_socket.close()
tcp_server_socket.close()

 

标签:socket,tcp,client,TCP,服务端,客户端
From: https://www.cnblogs.com/cll9/p/17045271.html

相关文章

  • linux TCP连接的状态详解以及故障排查
    TCP连接的状态详解以及故障排查  一、TCP网络常用命令了解TCP之前,先了解几个命令:linux查看tcp的状态命令:1)、netstat-nat查看TCP各个状态的数量2)、lso......
  • 关于华普物联HP-ERS-T200串口服务器TCP 连接互联网服务器操作案例
    本案例使用“路由侠”模拟互联网服务器,使用“路由侠”生成的外网地址进行测试。    硬件连接 将HP-ERS-T200通过USB转RS232串口线连接到PC的USB口......
  • 华普物联HP-EAIO-244关于大棚智能控制系统,RS485转RJ45工业以太网,TCP Client,Modbus TC
    很多蔬菜、花卉、林木等植物栽培或育苗都需要在温室里进行,温室,又称暖房。能透光、保温(或加温),用来栽培植物的设施。在不适宜植物生长的季节,能提供温室生育期和增加产量,多用......
  • stream TCP&UDP反向代理配置,设置stream 日志打印格式
    stream{    log_formatldyhttps            '$remote_addr|[$time_local]|$protocol|$status|$connection|$session_time|$upstream_connect_time|'......
  • UDP比TCP快吗
    话说,UDP比TCP快吗?相信就算不是八股文老手,也会下意识的脱口而出:"是"。这要追问为什么,估计大家也能说出个大概。 但这也让人好奇,用UDP就一定比用TCP快吗?什么情况下用U......
  • nginx用TCP转发HTTP
    stream{upstreamsocket_proxy{hash$remote_addrconsistent;server127.0.0.1:80weight=5max_fails=3fail_timeout=120s;}server{......
  • tcpdump高级使用和TCP/IP协议了解
    1.打印数据长度大于0的数据包ToprintallIPv4HTTPpacketstoandfromport80,i.e.printonlypacketsthatcontaindata,not,forexampl......
  • C++ - TCP/UDP网络编程
    前言socket编程分为TCP和UDP两个模块,其中TCP是可靠的、安全的,常用于发送文件等,而UDP是不可靠的、不安全的,常用作视频通话等。如下图:头文件与库:#include<WinSock2.h>......
  • Python网络编程之TCP服务端程序开发
     一、开发TCP服务端程序开发步骤回顾创建服务端端套接字对象绑定端口号设置监听等待接受客户端的连接请求接收数据发送数据关闭套接字二、socket类的介绍导入socket模......
  • golang中tcp socket粘包问题和处理
    ​​http://www.01happy.com/golang-tcp-socket-adhere/​​在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?例如我们和客户端约定数据交互格式是一个json......