高级编程tcp,udp

1.四层:应用层 tcp/ip 传输层 网络层 链路层
2.七层:会话,表示,应用,传输,网络,数据链路,物理层。
理论上是7层,实际上是四层
3.端口,就是区分进程的。区分唯一进程的标记,pid是一台电脑上的进程,在多台电脑上就是端口
4.80端口是http,21端口是给ftp上的,0-25535,知名
1024-65535 动态端口
5.命令,netstat -an

四.ip地址

五.socket
tcp慢,不丢数据
tcp快,容易丢数据

udp绑定
单工:只能收
半双工:对讲机
全双工:电话

发数据
udpSocket.sendto('你好'.encode("utf-8"),('192.168.0.107',8080))

接收数据
最多能收1024个字节,前面赋值两个数据,就是代表接收到的是两个值,前面需要赋值2个变量
a,b = udpSocket.recvfrom(1024)

#绑定信息,只能绑定本地的,发送方不需要进行绑定,随机就可以,接收方需要绑定,ip地址也可以为空
udpSocket.bind(("",8080))

作业:
写一个程序,进行发数据和接收。无限接受
东哥语录,自己问自己问题

收到的数据在给人返回去叫空包
echo是空包

研究 globle全局变量的引用

作业2.模拟QQ聊天程序,多线程测试

from socket import *
#创建套接字
udpSocket = socket(AF_INET,SOCK_DGRAM)
#绑定信息,只能绑定本地的,发送方不需要进行绑定,随机就可以,接收方需要绑定
udpSocket.bind(("",8080))

# #ip地址确定接收方是谁
# udpSocket.sendto(b"haha",('192.168.0.107',8080))
#发送中文,在字符串后面添加encode("utf-8")
# udpSocket.sendto('你好'.encode("utf-8"),('192.168.0.107',8080))
udpSocket.sendto('你好'.encode("utf-8"),('192.168.0.107',8080))

#使用udp发送的数据,每发一次信息建立一个连接,ip和端口号
#使用套接字,每次的端口号都是不一样的,python3中不能使用字符串,只能使用 byte类型
# udpSocket.sendto(b"haha",('192.168.119.115',8080))

#收,最多能收1024个字节,前面赋值两个数据,就是代表接收到的是两个值,前面需要赋值2个变量
a,b = udpSocket.recvfrom(1024)
print(a.decode())

from socket import *

def main():
udpSocket = socket(AF_INET, SOCK_DGRAM)

udpSocket.bind(("", 6789))

#收,打印
while True:
recvInfor = udpSocket.recvfrom(1024)
print("[%s]:%s"%(str(recvInfor[1]), recvInfor[0].decode("gb2312")))


if __name__ == "__main__":
main()




原文地址:https://www.cnblogs.com/wangjunxi/p/11832208.html