七 网络通信

七 网络通信

93.网络通信概述

通过网络互相通信

94.IP地址

在互联网上的唯一标识

95.Linux、windows查看网卡信息

Linux

ifconfig

关闭网卡
sudo ifconfig ensxxx down
开启
sudo ifconfig ensxxx up

Windows

ipconfig

96.ipv4和ipv6

ipv4:

ipv6:

97.端口

端口(port)确定机器上的进程

98.端口分类:知名端口和动态端口

Linux中有65536个端口

知名端口

0-1023
80:HTTP
21:FTP

动态端口

1024-65535

查看端口

netstat -an  # 查看端口状态

99.socket介绍

Tocket:套接字===ip+端口
具体就是ip+协议+端口

进程间的通信就是数据共享

  1. 创建socket

在python中使用socket模块的函数socket就可以完成

import socket
socket.socket(AddressFamily,Type)

说明:
函数socket.socket创建一个socket,该函数带有两个函数:

  • Address Family:可以选择AF_INET(用于Internet 进程间的通信)或者AF_UNIX (用于同一台机器进程间的通信),实际工作中常用AF_INET
  • Type:套接字类型,可以是SOCKET_STREAM(流式套接字,主要用于TCP协议)或者SOCKET_DGRAM (数据包套接字,主要用于UDP协议)

创建一个tcp socket (tcp套接字)

import socket
# 创建tcp套接字
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 使用套接字功能

# 关闭
s.close()

创建一个udp socket (udp套接字)

import socket
# 创建udp套接字
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 使用套接字功能

# 关闭
s.close()

滑稽:lua语言写外挂的

vim语法:
V+上下 
shift+< 进行缩进

100.udp发送数据

import socket
# 1.创建udp套接字
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 2.接收方地址
# ‘192.168.1.103’表示目的ip地址
# 8080表示端口
dest_addr=('192.168.1.103',8080) # 注意是是元组,ip是字符串,端口是数字

# 3.从键盘上获取数据
send_data=input("请输入要发送的数据:")
# udp_socket.senddto(b"hehe",dest_addr)  # 发送数据必须为bytes
# 4. 发送数据到指定的电脑上的指定程序
udp_socket.sendto(send_data.encode('utf-8'),dest_addr)

# 5.关闭套接字
udp_socket.close()

在桥接模式下
输入以下命令sudo dhclient
得到一个局域网的ip

101.关闭虚拟机的虚拟网卡

virtual开头的网关了

102.运行python程序

ipython

在这里插入图片描述
循环发送

import socket

# 1.创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.接收方地址
# ‘192.168.1.103’表示目的ip地址
# 8080表示端口

dest_addr = ('182.92.82.121', 7788)  # 注意是是元组,ip是字符串,端口是数字
while True:

    # 3.从键盘上获取数据
    send_data = input("请输入要发送的数据:")
    # udp_socket.senddto(b"hehe",dest_addr)  # 发送数据必须为bytes
    # 4. 发送数据到指定的电脑上的指定程序
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

# 5.关闭套接字
udp_socket.close()

带退出的发送数据

import socket

# 1.创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.接收方地址
# ‘192.168.1.103’表示目的ip地址
# 8080表示端口

dest_addr = ('182.92.82.121', 7788)  # 注意是是元组,ip是字符串,端口是数字
while True:

    # 3.从键盘上获取数据
    send_data = input("请输入要发送的数据:")
    # udp_socket.senddto(b"hehe",dest_addr)  # 发送数据必须为bytes
    # 4. 发送数据到指定的电脑上的指定程序
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

# 5.关闭套接字
udp_socket.close()

103.接受udp数据

from socket import *

# 1.创建套接字
udp_socket=socket(AF_INET,SOCK_DGRAM)

# 2.绑定本地相关信息,如果一个网络程序不绑定,则系统会随机分配
local_addr=('',7788) # ip地址和端口号,ip一般不写,表示本机的任何一个ip
udp_socket.bind(local_addr)

# 3.等待接收对方发送的数据
recv_data=udp_socket.recvfrom(1024) # 表示本次接收的最大字节数

# 4.显示接受到的数据
print(recv_data[0].decode('gbk'))
# 前面省略,从下面直奔主题,举个代码例子:
result2txt=str(recv_data[0].decode('gbk'))          # data是前面运行出的数据,先将其转为字符串才能写入
with open('结果存放.txt','a') as file_handle:   # .txt可以不自己新建,代码会自动新建
    file_handle.write(result2txt)     # 写入
    file_handle.write('\n')         # 有时放在循环里面需要自动转行,不然会覆盖上一条数据
# 5.关闭套接字
udp_socket.close()

在这里插入图片描述
循环接受并打印

       from socket import *
       
       # 1.创建套接字
       udp_socket=socket(AF_INET,SOCK_DGRAM)
       
       # 2.绑定本地相关信息,如果一个网络程序不绑定,则系统会随机分配
       local_addr=('',7788) # ip地址和端口号,ip一般不写,表示本机的任何一个ip
       udp_socket.bind(local_addr)
       while True:
      # 3.等待接收对方发送的数据
              recv_data=udp_socket.recvfrom(1024) # 表示本次接收的最大字节数
      
             # 4.显示接受到的数据
              print(recv_data[0].decode('gbk'))
              print(recv_data)
              # 前面省略,从下面直奔主题,举个代码例子:
              result2txt=str(recv_data[0].decode('gbk'))          # data是前面运行出的数据,先将其转为字符串才能写入
              with open('结果存放.txt','a') as file_handle:   # .txt可以不自己新建,代码会自动新建
                  file_handle.write(result2txt)     # 写入
                  file_handle.write('\n')         # 有时放在循环里面需要自动转行,不然会覆盖上一条数据

104.端口绑定的问题

发送数据的进程发送数据时会被主机随机分配一个随机端口(在没有绑定固定端口时)

发送程序绑定端口

import socket

# 1.创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.接收方地址
# ‘192.168.1.103’表示目的ip地址
# 8080表示端口
udp_socket.bind("",7890)
dest_addr = ('182.92.82.121', 7788)  # 注意是是元组,ip是字符串,端口是数字
while True:

    # 3.从键盘上获取数据
    send_data = input("请输入要发送的数据:")
    # udp_socket.senddto(b"hehe",dest_addr)  # 发送数据必须为bytes
    # 4. 发送数据到指定的电脑上的指定程序
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

# 5.关闭套接字
udp_socket.close()

不同进程不可以占用同一端口

105.重要概念

私有ip不能上网
在这里插入图片描述

106.输入对方的ip、port、全双工、半双工

行数+G :vi跳行
A:行末

给自己进程发信息IP为:127.0.0.1

recvfrom受不到信息,会卡住

import socket

# 1.创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.接收方地址
# ‘192.168.1.103’表示目的ip地址
# 8080表示端口
dest_ip=input("输入ip")
dest_port=int(input("输入port"))
udp_socket.bind("",7890)
dest_addr = (dest_ip, dest_port)  # 注意是是元组,ip是字符串,端口是数字

# 3.从键盘上获取数据

send_data = input("请输入要发送的数据:")
# udp_socket.senddto(b"hehe",dest_addr)  # 发送数据必须为bytes
# 4. 发送数据到指定的电脑上的指定程序
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
    
    
# 套接字可以同时收发    
recv_data=udp_socket.recv_from(1024)
print(recv_data)


# 5.关闭套接字
udp_socket.close()

单工:只可以发或收
半双工:可以收发,但不能同时
全双工:可以同时收发

socket:是全双工的

107.案例:udp聊天器

108.tcp介绍

109.tcp客户端

tcp服务器

案例:下载文件

liten里的参数

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值