python: tcp/ip学习、端口号、UDP的发送和接受数据、绑定端口号、模拟聊天室
来源:互联网 发布:淘宝店铺排行 编辑:程序博客网 时间:2024/06/05 19:53
1、 在进程中为每个系统定义了一个数字,就是端口,知道数据发送到哪个程序中;ip决定发送到哪个电脑。因为不同的电脑程序所在的进程号不同,不能通过进程号来发送。
通过端口进入程序所在的进程。
2、端口号的数值0-65535
3、知名端口号0~1023和动态端口号
80端口网站:HTTP
ipv4:
端口号用来区分不同的应用程序。
4、ip地址:在网络上标定一个电脑,地址: 网络地址和主机地址(即网络号和主机号),网络号相同说明在同一个网络中,用后面的主机号来区分网络中的电脑。
A类IP地址:网络号占一个字节,主机号占三个字节;B类IP地址:网络号占二个字节,主机号占二个字节;C类IP地址:网络号占三个字节,主机号占一个字节1-254,0和255无法使用,为0时表示当前网络号;为255时表示广播地址。
虚拟机也占一个IP地址。
在一个局域网中不能有两个相同的ip地址。
在程序中,若一个变量表示字符,初始化时str1="";若一个变量表示对象,初始化时str2=None;
5、有一部分IP地址是私有IP:只能在局域网中能被访问到
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
一部分IP地址是公用IP:在网络中可以访问到到。
6、不同电脑中的进程之间的通信是通过socket
使用:创建socket
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)://第一个参数是满足IP地址协议,第一个参数创建的socket完成TCP协议
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)://第一个参数是满足IP地址协议,第一个参数创建的socket完成UDP协议
7、现行IPMSG为版本1,基本格式如下:
版本号:包编号:发送者姓名:发送者机器名:命令名:附加信息
1:123223:user:machine:32:have a try
8、应用层也有自己的协议:比如QQ有自己的协议
下一层就是传输层:TCP/UDP
from socket import *udpSocket=socket(AF_INET,SOCK_DGRAM)#使用udp发送的数据,在每一次的时候都需要写上接收方的IP和portudpSocket.sendto("hha",("192.168.80.88",8080))udpSocket.sendto("hha111",("192.168.80.88",8080))
相同 的程序每一次运行都会动态的分配一个端口号(动态端口号>1024),在同一个OS(操作系统中),端口不允许相同,即如果一个端口已经被使用,那么在这个进程释放这个端口之前,其他进程不可以使用这个端口。
因为端口来区分一个进程, 如果端口相同了,就无法将数据发送给正确的进程。因此端口号不可以相同。
为了解决同一个程序每次运行有不同端口号的问题,实行绑定:
#endcoding=utf-8from socket import *udpSocket=socket(AF_INET,SOCK_DGRAM)udpSocket.bind(("",7788)) #参数是元组的形式#使用udp发送的数据,在每一次的时候都需要写上接收方的IP和portudpSocket.sendto("hha",("192.168.80.88",8080))udpSocket.sendto("hha111",("192.168.80.88",8080))
。。。未完待续
9、接收数据
#endcoding=utf-8from socket import *udpSocket=socket(AF_INET,SOCK_DGRAM)udpSocket.bind(("",7788)) #参数是元组的形式#使用udp发送的数据,在每一次的时候都需要写上发送方的IP和portrecvData=udpSocket.recvfrom(1024)print(recvData)
接收结果(recvData):('http://www.cmsoft.cn', ('192.168.80.96', 8080))
接收方也需要绑定端口号,不然发送方不确定要发送的目的。
10、发送数据过程:
消息内容---->端口号+消息内容-------->目的IP地址+端口号+消息内容--------->MAC(硬件信息)+目的IP地址+端口号+消息内容------------>目的
接受数据过程:
相反过程
11、模拟聊天室
错误提示:File "<string>", line 1, in bind
出现这样的问题,说明IP地址或端口号绑定有问题
利用多线程的方法实现固定ip地址和端口号的发送和接收消息
#endcoding=utf-8from threading import Threadimport timeimport sysreload(sys)sys.setdefaultencoding('utf-8')from socket import *def recvData():while True:recvInfo=udpSocket.recvfrom(1024)print("[%s]:%s"%(str(recvInfo[1]),recvInfo[0]))def sendData():while True: sendInfo="hello" time.sleep(5)udpSocket.sendto(sendInfo.encode("gb2312"),("192.168.80.70",8080))udpSocket=Nonedef main():global udpSocketglobal destIPglobal destPortudpSocket=socket(AF_INET,SOCK_DGRAM)udpSocket.bind(("192.168.80.70",4545)) tr=Thread(target=recvData)ts=Thread(target=sendData)tr.start()ts.start()tr.join()ts.join()if __name__=="__main__":main()
- python: tcp/ip学习、端口号、UDP的发送和接受数据、绑定端口号、模拟聊天室
- python: tcp/ip学习、端口、udp和tcp的应用
- 关于单片机TCP/IP协议栈的实现目前的进度和问题——TCP或UDP发送数据,端口绑定问题
- Winsock:获取UDP数据发送端的IP地址和端口号
- Winsock:获取UDP数据发送端的IP地址和端口号
- IP、子网掩码、TCP和UDP协议包头、常见端口号
- TCP 和UDP绑定同一端口
- 【转】TCP 和 UDP 绑定同一端口通信的解释
- TCP 和 UDP 绑定同一端口通信的解释
- TCP和UDP的端口
- IP,端口,tcp和udp简介
- TCP和UDP端口号使用
- 端口,IP, TCP, UDP的用处
- TCP 和 UDP 能否使用相同的端口号?
- TCP/UDP常见端口号
- TCP/UDP常用端口号
- TCP/UDP常用端口号
- Socket,IP,端口,TCP,UDP
- System.out与System.err的区别
- winrar去广告
- PAT乙级1009
- minetest源码解析三:菜单响应以及核心函数介绍
- Go语言学习笔记(二)基本数据
- python: tcp/ip学习、端口号、UDP的发送和接受数据、绑定端口号、模拟聊天室
- 图像识别初识
- HDU1874-畅通工程续-最短路
- 欢迎使用CSDN-markdown编辑器
- shiro整合SpringMVC
- minetest源码解析四:game界面刷新绘制流程及核心函数介绍
- Flask实战1-轻博客
- HPU1409 Watch Dog(Prim,最小生成树,河南省多校连萌(三))
- 2017 暑假艾教集训 day11 线段树!