python3 实现tcp/udp局域网通信

1、tcp和udp的关系

  tcp/ip是一个协议组,它可以分为四个部分,分别是:链路层、网络层、传输层、应用层

  tcp和udp同属于tcp/ip的传输层

  tcp是基于连接的协议,也就是说,在正式发送数据前,必须简历可靠的连接。tcp建立连接时需要进行三次握手,关闭连接时需要进行四次挥手,这就好像是在打电话一样。

  udp是面向非连接的,它不要要和对方建立连接,而是直接把数据包发送过去,他不需要进行三次握手和四次挥手,这就好像写信一样,相对不可靠。

2、tcp和udp的使用场合

  udp使用场合

    对效率要求相对高,对准确性要求相对低的场景。udp一般用于即时通信、在线视频、网络语音电话

 

  tcp使用场合

    对效率要求相对低,对准确性要求相对高的场景,或者是要求有连接的场景。tcp一般用于文件传输协议(ftp、http)、发送或接收邮件(pop、 smtp)、远程登陆(telnet、ssh)

3、udp的简单实现

# 导入socket套接字
import socket
# 创建udp套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 绑定端口和ip
udp_socket.bind(('', 8000))
# 设置允许广播
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 获取用户需要发送的内容
mess = input("enter the information you want to send:")
# 定义目标地址
dest_addr = ("255.255.255.255", 8000)
# 发送输入的数据到指定的ip,255.255.255.255表示广播
udp_socket.sendto(mess.encode(), dest_addr)
# 接收1024个字节的数据
recv_data, recv_addr = udp_socket.recvfrom(1024)
# 打印接收到的数据,因为接收到的数据来自windows,所以需要使用gbk解码
print(recv_data.decode("gbk"))
# 关闭套接字
udp_socket.close()

4、tcp的简单实现

# 服务器端
# 导入socket套接字
import socket
# 创建tcp套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# 绑定本地ip和端口
server_socket.bind(("",8080))
# 设置监听状态,1表示统一时刻只能有一个链接
server_socket.listen(1)
# 等待客户端链接
client_socket, client_addr = server_socket.accept()
# 设置返回的信息,如果这样返回的话,使用浏览器访问将出现hellworld,因为http协议也是基于tcp的
mess = "HTTP/1.1 200 OK\r\n\r\nhello world"
# 给客户端套接字发送数据
client_socket.send(mess.encode())
# 接受1024个字节的数据
recv_data = client_socket.recv(1024)
# 打印数据并解编码
print(recv_data.decode("gbk"))
# 关闭客户端套接字
client_socket.close()
# 关闭服务器套接字
server_socket.close()
# tcp客户端
# 导入socket套接字
import socket
# 创建tcp套接子
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立链接
client_socket.connect(("192.168.217.1", 8080))
# 获取需要发送的数据
send_data = input("enter you need to send:")
# 发送数据
client_socket.send((send_data.encode()))
# 接收1024个字节的数据
recv_data = client_socket.recv(1024)
# 打印数据,因为是windows,所以需要gbk解码
print(recv_data.decode("gbk"))
# 关闭套接字
client_socket.close()

 

  

posted @ 2018-09-11 16:14  wangqj  阅读(932)  评论(0编辑  收藏  举报