计算机网络:
ip地址:电脑独有的标识
ping命令:用于检查某个ip地址是否可以连通
端口:
端口的作用就是给运行的应用程序提供传输数据的通道
端口号的作用是用来区分和管理不同端口的,通过端口号能找到唯一个的一个端口
端口号可以分为两类:知名端口号和动态端口号
- 知名端口号的范围是0到1023
- 动态端口号的范围是1024到65535
监听:
监听是软件启动以后,这个端口自动被占用,当我们向这个端口发送数据时,其他应用程序就会收到信息
tcp:
面向连接:
通信双方必须建立好连接才能进行数据的传输,数据传输完成后,双方必须断开此链接,以释放系统资源
可靠传输:
- tcp采用发送应答机制
- 超时重传
- 错误校验
- 流量控制和阻塞管理
客户端发送数据流程:
- 创建客户端套接字对象--------------------------------------socket()
- 和服务器端套接字建立连接(参数为元组)--------connect()
- 发送数据(必须是字节流)----------------------------------send()
- 接受数据------------------------------------------------------------recv()
- 关闭客户端套接字----------------------------------------------close()
import socket
#encode(编码格式):把字符串类型的数据转换为bytes字节流数据,编码格式可以是gbk或utf-8
#decode():把bytes字节流数据转换为字符串型的数据
#创建套接字对象
tcp_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#和服务器建立连接(参数要求为元组数据)
tcp_client.connect(('192.168.15.23',8081))
#发送数据到服务器端(要求数据必须是字节流)
data='你好,我是tcp客户端'.encode('gbk')
tcp_client.send(data)
#接受从服务器端返回的数据recv(字节大小)
recv_data=tcp_client.recv(1024).decode('gbk')#将字节流信息转为字符串型
print('我是服务器端:',recv_data)
#关闭套接字对象
tcp_client.close()
客户端循环发送数据:
# 开发人:龙技术
# 个人训练
# 开发时间:2021/8/11 15:11
import socket
#encode(编码格式):把字符串类型的数据转换为bytes字节流数据,编码格式可以是gbk或utf-8
#decode():把bytes字节流数据转换为字符串型的数据
#创建套接字对象
tcp_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#和服务器建立连接(参数要求为元组数据)
tcp_client.connect(('192.168.15.23',8080))
#发送数据到服务器端(要求数据必须是字节流)
while True:
data=input('客户端:').encode('gbk')
tcp_client.send(data)
#接受从服务器端返回的数据recv(字节大小)
recv_data=tcp_client.recv(1024).decode('gbk')#将字节流信息转为字符串型
print('服务器端:',recv_data)
if recv_data=='下线' or data.decode('gbk')=='溜了溜了':
break
#关闭套接字对象
tcp_client.close()