文章目录
- 一. 网络编程基础
- - 什么是IP地址?
- - 什么是端口和端口号?
- - TCP介绍
- - socket介绍
- 二. TCP客户端程序开发
- 三. 扩展
一. 网络编程基础
- 什么是IP地址?
IP地址就是标识网络中设备的一个地址
IP地址分为 IPv4 和 IPv6
IPv4使用十进制, IPv6使用十六进制
- linux和mac系统使用 ifconfig
- windwos系统使用 ipconfig
- 什么是端口和端口号?
端口是传输数据的通道,是数据传输的必经之路,而每一个端口都有对应的端口号,想要找到端口通过端口号即可
端口号是端口的表示
端口分类: (0-65535)
1. 知名端口号: 0-1023
2. 动态端口号: 1024-65535
IP+端口 可以确定网络中唯一的应用程序
- TCP介绍
数据不能随意传输, 在发送之前还需要选择一个对应的传输协议, 保证程序之间按照指定的传输规则进行数据的通信
TCP全称 Transmission Control Protocol,简称 传输控制协议, 它是一种面向连接的, 可靠的, 基于字节流的传输层通信协议
TCP的特点:
- 面向连接:
- 通信双方必须先建立好连接才能进行数据的传输,数据传输完成后,双方必须断开此连接,以释放系统资源 - 可靠传输:
- TCP 采用发送应答机制
- 超时重传
- 错误校验
- 流量控制和阻塞管理
- socket介绍
socket简称 套接字, 是进程之间通信的一个工具, 好比现实生活中的插座, 所有的家用电器想要工作都是基于插座的, 而进程之间想要进行网络通信需要基于socket
作用: 负责进程之间的网络数据传输, 好比数据的搬运工
二. TCP客户端程序开发
"""
程序架构:
B/S: brower/server(浏览器/服务器), 想要使用某个服务,只需要浏览器即可
C/S: Client/Server(客户端/服务器), 想要使用某个服务,必须下载它对应的客户端软件
客户端连接服务器过程: (发送信息和接受信息可以重复执行)
1. 创建对象
2. 建立连接
3. 发送信息
4. 接收信息
5. 关闭连接
# 上述只是客户端的,服务端使用网络调试助手
客户端开发流程:
Python中先要使用socket, 必须先导入 socket模块
1. 创建 socket 对象 socket.socket()
2. 和服务器建立连接 socket对象.connect()
3. 发送信息 socket对象.send()
4. 接受对方发送的信息 socket对象.recv()
5. 关闭连接 socket对象.close()
Python中的字符串:
Python中的字符串可以分为两种
1. str
2. bytes: 字节, 二进制, 网络中数据的传输都是bytes类型
使用 type(变量值) 查看变量类型
str --> bytes: str类型.encode(编码类型)
bytes --> str: bytes类型.decode(编码类型)
常用编码类型: gkb 和 utf-8,这两种编码类型,都是处理中文字符串
1. gbk处理方式: 将一个中文字符编码为 2 个字节
2. utf-8处理方式: 将一个中文字字符编码为 3 个字节
"""
import socket
if __name__ == '__main__':
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("192.168.218.1", 8080))
print("连接建立成功")
send_data = "hello world!!!!".encode()
client_socket.send(send_data)
buf = client_socket.recv(4096)
try:
print(buf.decode())
except UnicodeDecodeError:
print(buf.decode('gbk'))
client_socket.close()
三. 扩展
当创建一个 TCP socket 的时候,会有一个 发送缓冲区 和 接收缓冲区 , 这个发送和接收缓冲区指的就是内存中的一片空间
send并不是直接把数据发送给服务器端, 想要发送数据, 就必须使用网卡进行发送, 而应用程序是无法直接通过网卡发送数据的, 需要调用系统接口, 也就是说
应用程序把发送的信息先写到发送缓存区, 再由操作系统控制网卡把发送缓冲区的数据发送给服务端网卡
同理, 应用程序也无法直接通过网卡接收数据, 也需要调用系统接口, 由操作系统通过网卡接收数据, 把接收的数据写入缓冲区, 应用程序再从缓冲区获得客户端发送的信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)