Socket网络编程(一)
使用UDP完成通信
UDP是面向无连接的协议。就像以前发邮件,只需要将数据发送出去,不需要知道对方是否收到。在使用UDP协议时,只需要知道对方的ip及端口号,则可以发送数据。
服务器:
import socket
def udp_server():
#创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#绑定端口 元组
local_addr = ('',8888) #绑定自己的IP或者端口
udp_socket.bind(local_addr)
#接收数据
while True:
udp_recv_data = udp_socket.recvfrom(1024)
recv_messege = udp_recv_data[0]
recv_addr = udp_recv_data[1]
#打印接收的数据
print("%s:%s" % (str(recv_addr), recv_messege.decode("utf-8")))
#关闭套接字
udp_socket.close()
if __name__ == '__main__':
udp_server()
客户端:
import socket
def udp_send():
#创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#循环发送数据
while True:
socket_data = input("发送的数据:")
if socket_data == "Exit":
break
udp_socket.sendto(socket_data.encode("utf-8"),("127.0.0.1", 8888))
#关闭套接字
udp_socket.close()
if __name__ == "__main__":
udp_send()
recvfrom在未接受到消息时,默认堵塞。
解堵塞有两种方式:1.接收到消息 2.关闭套接字
recvfrom返回的返回值为元组,(收到的信息,(ip,端口))
recvfrom(1024)
括号里为接收最大字节数,若小于会接收成功,若大于在windows系统中会直接报错,在mac和linux系统中会只接受到最大字节数的数据,即大于的部分丢包