
TCP/IP协议
四层表示:链路层--->网络层--->传输层--->应用层
七层表示:物理层--->数据链路层--->网络层--->传输层--->会话层--->表示层--->应用层
Socket
创建一个tcp socket(tcp套接字)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket Created'
创建一个udp socket(udp套接字)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print 'Socket Created'
使用Socket发送消息
import socket
udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sendAddr = ("192.168.0.178", 8888)
sendData = "Hello World"
udpSocket.sendto(bytes(sendData, 'utf-8'), sendAddr)
udpSocket.close()
使用Socket接收数据
import socket
udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
bindAddr = ('', 8888) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
udpSocket.bind(bindAddr)
recvData = udpSocket.recvfrom(1024) # 1024表示本次接收的最大字节数
print(recvData)
udpSocket.close()
UDP广播
import socket
# 相当于 192.168.1.255 通用的网段写法
dest = ('<broadcast>', 7788)
# 创建udp套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 对这个需要发送广播数据的套接字进行修改设置,否则不能发送广播数据
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 以广播的形式发送数据到本网络的所有电脑中
s.sendto("Hi".encode('utf-8'), dest)
print("等待对方回复(按ctrl+c退出)")
while True:
(buf, address) = s.recvfrom(2048)
print
"Received from %s: %s" % (address, buf)
广播只能在UDP中使用
网友评论