IP地址:互联网协议地址,计算机的通行证.计算机在网络中的唯一身份标识.
桥接:Ubuntu虚拟机 直接连到局域网
NAT:网络地址转换
点分十进制:192.168.14.115
IP地址通常为4个字节,简称ipv4,这个.是形式上有的,实际的数据中没有这个.
IPv6:长度为8个字节

127.0.0.1:本地回环测试的地址,不能用作和其他计算机通信.

sudo ifconfig 网卡名 ip地址:设置ip地址

所有的手动设置的ip地址在重启之后都会失效

ifconfig:Ubuntu
ipconfig:Window

ping:和其他电脑之间通信是否正常

ping ip/域名:有正常返回

没有显示可能是通畅的,原因是对方的主机设置成了不回复类型.

端口:为什么是飞秋这个程序收到了而不是其他的程序?原因就是端口进行标识.

飞秋:2425端口

端口作用:用来标识计算机中的一个应用程序<服务>

ip + 端口:唯一确定网络中的一个程序,一般组合在一起使用,简称套接字地址.

数量:0-65535:一共65536个 两个字节标识的,是16个比特位,2bytes = 16 bit,2^16=65535

知名端口:0-1023,一般没人用0端口.

1024-65535:动态端口

80:HTTP
22:SSH
21:FTP
443:HTTPS

netstat -an | grep ':8080'

lsof -i [tcp/udp]:8080

解决dpkg安装时候的锁问题:
# dpkg lock sudo rm /var/lib/dpkg/lock && sudo dpkg --configure -a

udp:用户数据包协议

无连接:不管对方在不在线,只管发送.

只需要知道对方的地址即可

不可靠,易丢包.

socket:套接字,不同电脑之间不同程序之间的通信
实现不同进程之间的一种通信工具.

gram:报

dgram:数据报,data gram的简写就是dgram.
客户端和客户端之间无法通信.必须要服务器中转.

计算机中无法发送str类型数据,必须进行转换,转换成二进制类型数据才能进行发送

python3中:
str --> bytes :encode(),默认为utf-8编码,所以不用写参数默认是utf-8,可以省略不写
bytes ----> str : decode(),二进制解码为str

utf-8:一个汉字:3个字节
gbk:一个汉字2个字节

encode(encoding,errors): encoding -->指定编码方式,errors --> 指定 如果编码解码

出错,strict:严格模式,抛出异常,ignore:忽略编码解码错误,宽松模式,会忽略异常.

Ubuntu 16.0 中默认是utf-8 编码

Window下的调试助手需要utf-8的编码,但是发送的时候是gbk编码

步骤:
1.>创建socket udp_socket = socket.socket()
2.>发送消息 udp_socket.sendto()
3.>接收返回 udp_socket.recvfrom(1024)
4.>关闭socket udp_socket.close()

客户端收发数据:

import socket

# 1.创建套接字  地址协议族 ipv4 --> socket.AF_INET  套接字类型 用户数据报 -->socket.SOCK_DGRAM
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 接收方地址,在socket中这个是组合成一个元组类型来使用的
recv_addr = ('127.0.0.1', 8089)
data = input('输入要发送的数据:') # 2.发送消息
# 使用sendto()发送数据,参数1是数据,参数2是目的地址(也叫接收地址(ip和端口)),原因是udp是无连接的,所以必须标识清楚发给谁,发的什么数据?
udp_socket.sendto(data.encode(), recv_addr) # 记得给输入的字符串数据进行编码转成bytes类型,才能进行数据传输. # 3.接收消息
# 返回值是一个元组类型,里面包括 发送的数据和发件地址(ip + 端口) 原因还是udp是无连接的,所以接收方也需要标识清楚发件方是谁,发的是什么.
# 接收使用recv.from()方法,参数是数据大小,一般设定为1024的整数倍即可. # 因为不是面向连接的所以不知道是谁发过来的信息,所以返回值就需要有一个地址来标记是谁发过来的
recv_data, address = udp_socket.recvfrom(1024) # 本次接收数据的最大长度,一般为1024的整数倍
print('接收到来自%s的数据:%s' % (address, recv_data.decode('GBK'))) # 4.关闭套接字
udp_socket.close() # (数据bytes,(IP地址,端口)) = recvfrom(1024) # 本次接收的最大字节
# bind((本地IP,端口)) 申请固定端口,本地ip 一般设置为空

固定端口bind:

import socket

# 1 创建套接字            地址协议族IPv4 套接字类型 用户数据报
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 使用固定端口 绑定 IP地址,填空代表使用本机的任意IP ,因为一般来说一台主机的IP不止一个,有外网ip和内网ip,还有一个127.0.0.1本地ip.
udp_socket.bind(('', 8888)) # 2 发送消息
data = "你好,吃饭了吗"
recv_address = ('192.168.14.114', 8080) # 参数1是需要发送的数据-bytes 目的地址IP<字符串>和端口<数字>
udp_socket.sendto(data.encode(), recv_address) # 3 接收消息 参数1是本次接收的数据的最大长度
# 返回值  (b'abcd', ('192.168.14.114', 8080))
# 返回值是 数据 发件人地址构成的元组
recv_data, remote_address= udp_socket.recvfrom(1024) print("接收到来自%s的数据:%s" % (recv_address, recv_data.decode())) # 4 关闭套接字
udp_socket.close()

udp服务器:

"""
注意:udp/tcp的服务器都需要进行绑定端口,这样才能让客户端找到是哪个程序在进行通信
创建socket
绑定端口
发送数据
关闭socket
"""
import socket while True:
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 使用固定端口,bind()绑定端口,ip为空代表本机的任意ip
# 绑定 - > 使用固定端口 需要被其他人使用的时候就要绑定
udp_socket.bind(('', 8888)) # 反正我绑定本机上面的8888端口了,所以本机上面的其他程序不能用8888口
# 注意:必须要先绑定端口,然后才能进行收发数据的操作 # 进行收数据 将收到的数据返回去 ---> 这样模式的服务器称之为 echo 服务器(echo:反射,回复)
recv_data, address = udp_socket.recvfrom(1024) # 阻塞等待recvfrom,一直会等待接收数据,一旦数据到达才会继续往下执行.
# window -> Pycharm:gbk/gb2312 Pychram -> window : utf-8
print('接收到来自%s的消息:%s' % (address, recv_data.decode('gbk')))
recv_data = recv_data.decode('gbk').encode() # 将gbk编码对应的str进行utf-8格式编码,再发过去给window
# 回复数据 这里的编码问题,注意下
udp_socket.sendto(recv_data, address) # 注意:这里的recv_data是bytes类型,只能解码decode(),没有encode()的属性,
# window下面的调试助手显示乱码的原因是需要那边显示的部分进行解码 # 关闭 死循环,程序执行不到这里
udp_socket.close()

socket在bind之前使用:

from socket import *

# 1. 创建套接字
udp_socket = socket(AF_INET, SOCK_DGRAM) # 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
local_addr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
udp_socket.bind(local_addr) # 注意:只有先bind了才能进行sendto()操作.
udp_socket.sendto("hello".encode(), ('192.168.22.55', 8080)) udp_socket.close()

udp广播:

"""
广播:一对多
"""
import socket
while True: # 创建socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置socket选项 选项是socket层面 广播选项 1:设置,0:取消设置
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) udp_socket.sendto('你大爷'.encode(), ('255.255.255.255', 8080)) udp_socket.close()

udp聊天:

import socket

def menu():
print('-' * 30)
print('1-->发送,2-->接收,3-->退出')
print('-' * 30) def send_msg(udp_socket):
"""发送"""
data = input('数据:')
ip = input('ip:')
port = int(input('port:'))
udp_socket.sendto(data.encode(), (ip, port)) def recv_msg(udp_socket):
"""接收"""
udp_socket.bind(('', 8888))
data, address = udp_socket.recvfrom(1024)
print('来自%s的消息:%s' % (str(address), data.decode() ) ) def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True:
menu() op = int(input('选择操作>>>')) if op == 1:
send_msg(udp_socket)
elif op == 2:
recv_msg(udp_socket)
elif op == 3:
print('bye')
break
else:
print('输入错误,重来')
# 关闭
udp_socket.close() if __name__ == '__main__':
main()

UDP部分的更多相关文章

  1. Node.js:dgram模块实现UDP通信

    1.什么是UDP? 这里简单介绍下,UDP,即用户数据报协议,一种面向无连接的传输层协议,提供不可靠的消息传送服务.UDP协议使用端口号为不同的应用保留其各自的数据传输通道,这一点非常重要.与TCP相 ...

  2. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  3. TODO:Golang语言TCP/UDP协议重用地址端口

    TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...

  4. 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...

  5. 【Win 10 应用开发】UDP广播

    我们知道,对于UDP协议的通信,除了可以用来聊天外,可以发送广播数据.只要向广播地址的某个端口发送数据就可以进行广播,子网中只要监听该端口的socket就能收到广播消息. 最简单的方法就是向255.2 ...

  6. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  7. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  8. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  9. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  10. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

随机推荐

  1. 爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)

    1. 验证码识别 随着爬虫的发展,越来越多的网站开始采用各种各样的措施来反爬虫,其中一个措施便是使用验证码.随着技术的发展,验证码也越来越花里胡哨的了.最开始就是几个数字随机组成的图像验证码,后来加入 ...

  2. redis-布隆过滤器使用

    占用空间测试地址 https://krisives.github.io/bloom-calculator/

  3. 2018-2019 ACM-ICPC, Asia Seoul Regional Contest K TV Show Game 2-sat

    题目传送门 题意: 有n个人,k盏灯,灯有红蓝两种颜色,每个人都猜了三种灯的颜色,问如何安排灯的颜色,使得每个人猜的灯至少有两个是对的. 思路: 很容易想到2-sat,但是显然枚举每个人猜对的情况是不 ...

  4. handsontable 随记

    handsontable 怎么样获取合并之后的cell信息,如下 handsontable .getPlugin('mergeCells').mergedCellsCollection 看了他的源代码 ...

  5. 记录我个人对Telegram的了解

    对Telegram(电报) 开始的了解是以为提供了Telegram API,就可以基于它进行开发自己的即时通讯(Instant Messaging)程序. 大概使用过: webogram 和 tele ...

  6. JSTL标签的用法详解

    在JSP中写Java代码是一件很恶心的事情,代码量少的话还可以,要是多的话,就蛋疼了,整个页面都是<%  %>所以EL表达式和JSTL就应运而生了,这里我们注重讲解一下JSTL标签的使用: ...

  7. 洛谷 2327 [SCOI2005]扫雷

    输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一列中雷的摆放方案数. 输入输出样例 输入样例#1 ...

  8. bzoj1211树的计数 x bzoj1005明明的烦恼 题解(Prufer序列)

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3432  Solved: 1295[Submit][Stat ...

  9. SDOI2017 树点染色

    \[SDOI2017 树点染色\] 题目描述 Bob 有一棵 $ n $ 个点的有根树,其中 $ 1 $ 号点是根节点.Bob 在每个节点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是,这 ...

  10. Web移动端常见问题-摘抄

      一.按钮点击时出现黑色背景 解决方法: 1 2 .class { -webkit-tap-highlight-color:rgba(0,0,0,0);} .class { -webkit-appe ...