1. IP 地址

概念: 标识网络中设备的地址(需要联网才有没有联网, 是没有这个地址)

表现形式:

  • ipv4 目前主要使用的, 点分十进制的格式,(192.168.3.43)

    • 分为 4 段, 每段的范围是 0-255, 0.0.0.0 ~ 255.255.255.255
    • 公网 IP, 可以直接被别人使用访问的 ip(需要购买)
    • 局域网 ip(内网), 通过路由器或者交换机得到的 ip 都是局域网 ip, 只有处于同一个局域网的才能使用这个 ip, 电脑中查看到的 ip 都是局域网 ip.
  • ipv6 冒号 16 进程的格式

作用: IP地址可以标识网络中唯一的一台设备

查看 IP 地址

  • Linux 和 Mac : ifconfig
  • Windows : ipconfig

查看网络是否正常ping

  • ping 公网 ip 是否可以联外网, ping www.baidu.con
  • ping 局域网的 ip 检查是否在同一个局域网,设备是否连通

域名: 是 ip 地址的别名, 方便记忆, (DNS 服务器, 将域名转换为 ip 地址)

  • 127.0.0.1 本机的 ip 地址, 对应的域名 localhost

2. 端口

端口: 数据传输的通道

端口号: 是端口的唯一标识, 是一个整型数字(int)

端口的分类0-65535 一共 65536个

  • 知名端口 0-1023

    • http 协议 80
    • https : 443
    • ssh 22
  • 动态端口 1024-65535

通过 ip 找到某台主机, 设备
通过端口号,能对应主机中的一个应用程序
IP + 端口: 标识网络中唯一的一个应用程序

3. TCP

概念: 传输控制协议(主机间通信传输数据的规则)

特点:

  • 面向连接的(通信之前, 必须先建立连接)
  • 数据是可靠的
    • 发送应答
    • 超时重传
    • 错误校验
    • 流量控制

通信步骤:

  • 建立连接
  • 传输数据(通信)
  • 关闭连接

传输协议: TCP UDP

4. scoket

  • socket, 套接字, 进程间网络通信的工具.
  • 使用场景: 所有的网络通信的底层都会使用 socket

5. TCP 客户端

# 1. 创建 socket 对象       socket.socket()
# 2. 和服务器建立连接         socket对象.connect()
# 3. 发送数据给服务器         socket对象.send()
# 4. 客户端接收服务器发送的信息 socket对象.recv()
# 5. 关闭连接                socket对象.close()
# (3. 4 可以重复进行)

python 中的字符串

str: 使用引号引起来的就是字符串
bytes: 二进制类型的数据
str  --> bytes str.encode(编码类型)
bytes--> str   bytes.decode(编码类型)

程序代码:

import socket
# 1. 创建 socket 对象
# socket.AF_INET 表示 ipv4 AF_INET6 表示 ipv6
# socket.SOCK_STREAM 表示 tcp协议
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 和服务器建立连接(参数是元组)
client_socket.connect(('192.168.1.5', 8080))
print('和服务器建立连接成功')
# 3. 发送数据给服务器
# 3.1 准备数据(bytes)
send_info = '你好服务器'.encode()
# 3.2 发送数据
client_socket.send(send_info)
# 4. 客户端接收服务器发送的信息,参数表示一次接收多少字节
buf = client_socket.recv(4096)
try:print(f'接收到: {buf.decode()}')
except UnicodeError:print(f'接收到: {buf.decode("gbk")}')
# 5. 关闭连接
client_socket.close()

程序输出:

和服务器建立连接成功
接收到: 你好

注意点:
- 必须先启动服务器
- connect 是元组类型, 服务器的 ip 和端口不要写错

6. TCP 服务端

# 1. 创建 socket 对象
# 2. 绑定 IP 和端口
# 3. 设置监听, 将主动套接字变为被动套接字
# 4. 等待客户端链接阻塞等待
# 5. 接收客户端的信息
# 6. 给客户端发送信息
# 7. 关闭套接字

程序代码:

import socket
# 1. 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 绑定 IP 和端口(参数是元组)
server_socket.bind(('', 9999)) # IP 地址为空表示绑定的是王机中任意一个ip
# 3. 设置监听, 将主动套接字变为被动套接字,参数表示最多允许多少客户端同时请求服务器(不包括已经连接成功的)
server_socket.listen(128)
# 4. 等待客户端链接阻塞等待
print('等待客户端连接')
# 返回值是元组类型(用于通信socket,客户端的 IP 和端口
new_socket, ip_port = server_socket.accept()
print(f'客户端 {ip_port} 上线')
# 5. 接收客户端的信息
buf = new_socket.recv(4096)
print(f'接收到: {buf.decode()}')
# 6. 给客户端发送信息
new_socket.send('信息收到'.encode())
# 7. 关闭套接字
new_socket.close()
server_socket.close()

程序输出:

等待客户端连接
客户端 ('192.168.1.5', 65439) 上线
接收到: 你好服务器

设置端口复用:

# 参数1 level,设置哪个级别的socket, socket.SOL_SOCKET当前的socket(固定写法)
# 参数2 option, 设置什么内容, socket.SO_REUSEADDR 端口复用
# 参数3 将内容设置为什么值, True
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

判断客户端断开连接:

# buf: 字符串(容器)都可以直接作为 bool 类型进行判断,当容器中元素的个数为 0, 是 False, 其余是 True
if len(buf) == 0:pass
if buf:  # if not buf:pass

7. 多任务 TCP 服务端

程序代码:

import socket
import threadingdef handle_client_request(new_socket, ip_port):while True:buf = new_socket.recv(4096)if buf:try:print(f'接收到: {buf.decode()}')new_socket.send('信息收到'.encode())except UnicodeDecodeError:print(f'接收到: {buf.decode("gbk")}')new_socket.send('信息收到'.encode("gbk"))else:print(f'{ip_port} 下线')breaknew_socket.close()if __name__ == '__main__':# 1. 创建 socket 对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口复用server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 2. 绑定server_socket.bind(('', 9999))# 3. 设置监听server_socket.listen(128)# 4. 循环等待客户端链接阻塞等待print('等待客户端连接')while True:# 返回值是元组类型,(用于通信socket,客户端的Lio和端口port】,拆包new_socket, ip_port = server_socket.accept()print(f'客户端 {ip_port} 上线')sub_thread = threading.Thread(target=handle_client_request, args=(new_socket, ip_port))sub_thread.start()

注意:
- 线程要启动 start()
- new_socket.close() 位置要正确

python tcp不用循环监听_网络编程: TCP相关推荐

  1. Libevent实现TCP服务循环监听

    目标 建立一个简单的tcp服务,可持续的监听客户端的连接和请求 细节 libevent stream socket EV_READ | EV_PERSIST 代码 要义libevent对stream_ ...

  2. 编写tcp服务器发送hex格式_Android网络编程-TCP/IP协议

    在Android网络编程-计算机网络基础一文中得知,IP协议属于网络层,TCP.UDP协议属于传输层. IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的服务. TCP协议是 ...

  3. 多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...

    # 网络编程 # 计算机网络, 把多台独立自主的计算机,连接到网络,实现资源的共享 # Internet网,(互联网)eniac 1946美国大学第一台电子计算机 # # 一个TCP报文除了包含要传输 ...

  4. tcp丢包率_网络编程 | TCP/IP基础知识

    在2017年10月深圳 Cocos 沙龙上,有幸结识了社区中大名顶顶的Colin,Shawn在论坛上第一次看到Colin的团队用CocosCreator制作的<热血暗黑>时就被深深地震撼到 ...

  5. Socket编程(C语言实现)——TCP协议(网络间通信AF_INET)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输【多线程+循环监听】

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  6. linux netstat Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

    在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告. Netstat ...

  7. Python网络编程——TCP与UDP

    Python网络编程 TCP(复杂可靠)与UDP(简单不可靠)的区别 1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制): UDP提供无连接的传输,通信前不需要建立连接. 2) TCP ...

  8. Socket编程(C语言实现)——UDP协议(进程间通信AF_UNIX)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输【循环监听】

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  9. linux listen监听,Linux网络协议栈 -- socket listen监听

    一.sys_listen 对面向连接的协议,在调用 bind(2)后,进一步调用 listen(2),让套接字进入监听状态: int listen(int sockfd, int backlog); ...

最新文章

  1. oracle十六进制转数字,16进制如何转化为10进制?
  2. HDU 2079 选课时间
  3. linux虚拟网络设备之tun/tap驱动程序设计原理(五)
  4. MySQL批量更新死锁案例分析--转载
  5. 6.19决战光荣日,一场魔兽狂欢里的青春、父爱和友谊
  6. Maven修改远程仓库配置
  7. Codeforces 712C. Memory and De-Evolution
  8. 《穿靴子的猫》蓝光720P 1080P高清中英双字 下载
  9. Docker CEO Ben Golub:Docker借助开源、天时走向成功
  10. 三维坐标 偏转_三维坐标变换原理-平移, 旋转, 缩放
  11. conky的自动启动
  12. 欧科云链OKLink:以太坊上借贷协议借款量突破百亿美元
  13. 经过多次试验后第一个成功地实现 HTTPService 与 MXML 之间传递数据,ArrayCollection 与DataGrid 之间成功绑定...
  14. http中url的长度限制
  15. Redis 官方推出可视化工具,颜值爆表,功能真心强大!这是不给其他工具活路啊!...
  16. css手指代码,CSS3动画:通过Animation实现简单的手指点击动画
  17. 启用视口着色:在视图窗口实时显示灯光照明效果_daiding
  18. windows PE结构解析
  19. 相机外部参数—世界坐标、相机坐标、物体坐标变换
  20. 利用R语言ggplot2包制作金字塔图,展示人口结构数据

热门文章

  1. python简说(十五)MD5加密
  2. VC++关于UNICODE版本的开发
  3. SVG.path_不连续的线段
  4. keepalived+nginx安装
  5. HttpServletResponse,HttpServletRequest详解
  6. Matlab并行编程方法1
  7. php函数:register_shutdown_function
  8. 报表应用系列——图表JFreeChart: 第 4 章 折线图
  9. StartOS 5.0 正式版发布
  10. C#的方法的参数修饰符详解