网络编程之TCP UDP 通信
1.UDP发送数据:
#/usr/bin/python3 import socket def udp(): #创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #绑定本地信息 udp_socket.bind(("",7890)) #绑定本地端口 ip 任意 while True: #从键盘获取数据 send_data = input("请输入要发送的数据:") #如果输入的数据是exit,那么就退出程序 if send_data == "exit": break #可以使用套接字收发数据 #udp_socket.sendto(b"输入内容",(对方的ip及其port)) #udp_socket.sendto(b"hahha",("192.168.2.1",6666)) udp_socket.sendto(send_data.encode("utf-8"),("192.168.2.1",6666)) #关闭套接字 udp_socket.close() print("---您已经退出了---") if __name__ == '__main__': udp()
2.UDP之接受数据
import socket def tcp_socket(): #创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #获取对方的ip/port des_ip = input("请输入对方的ip:") des_port = int(input("请输入对方的port").strip()) #从键盘获取数据 send_data = input("请输入要发送的数据:") #可以使用套接字收发数据 udp_socket.sendto(send_data.encode("utf-8"),(des_ip,des_port)) #接收会送过来的数据 recv_data = udp_socket.recvfrom(1024) #套接字是一个可以同时收发数据的 print(recv_data) #关闭套接字 udp_socket.close() if __name__ == '__main__': tcp_socket()
3.UDP之绑定信息(端口+IP)
#!/usr/bin/python3 import socket def main(): #1.创建套接字 udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #2.绑定一个本地的信息 ip地址和端口号 ip一般不用写 表示本机的任何一个ip localaddr = ('',7788) udp_socket.bind(localaddr) #3.接收数据 while True: recv_data = udp_socket.recvfrom(1024) #1024表示本次接收的最大字节数 recv_msg = recv_data[0] # 存储接收的数据 send_addr = recv_data[1] # 存储发送方的地址信息 #4.打印接收到的数据 # print(recv_data) #print("%s:%s" %(str(send_addr),recv_msg.decode("utf-8"))) # send_addr是一>个元祖需要转成str字符串decode解码客户端以utf-8存decode以utf-8解码 print("%s:%s"%(str(send_addr),recv_msg.decode("gbk"))) # window默认发送端已 gbk存的数据接收端用gbk解码 #5.关闭套接字 udp_socket.close() if __name__ == '__main__': main()
4.简单UDP聊天功能
#!/usr/bin/python3 import socket def send_msg(udp_socket): """发送消息""" # 获取要发送的内容 dest_ip = input("请输入对方的ip:").strip() dest_port = int(input("请输入对方的port:").strip()) send_data = input("请输入要发送的消息:").strip() udp_socket.sendto(send_data.encode("utf-8"),(dest_ip, dest_port)) def recv_msg(udp_socket): """接收数据""" # 接收并显示 recv_data = udp_socket.recvfrom(1024) print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("utf-8"))) def main(): # 创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定信息 udp_socket.bind(("", 7788)) # 循环进行处理事情 while True: print("-----AV聊天器-----") print("1:发送消息") print("2:接收消息") print("0:退出系统") op = input("请输入功能:")
if op == "1": # 发送 send_msg(udp_socket) elif op == "2": # 接收并显示 recv_msg(udp_socket) elif op == "0": break else: print("输入有误 请重新输入....") if __name__ == "__main__": main()
5.TCP之 客户端
import socket def main(): #1.创建tcp套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2.链接服务器 #tcp_socket.connect(("192.168.2.1",8080)) server_ip = input("请输入要链接的服务器的ip:").strip() server_port = int(input("请输入要链接的服务器的port:").strip()) server_addr = (server_ip,server_port) tcp_socket.connect(server_addr) #3.发送数据 接收数据 send_data = input("请输入要发送的数据:") tcp_socket.send(send_data.encode("utf-8")) if __name__ == "__main__": main()
6.TCP之服务器端
#!/usr/bin/python import socket def main(): #1.买个手机(创建套接字 socket) tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2.插入手机卡(绑定本地信息 bind) tcp_server_socket.bind(("",7890)) #3.将手机设置为正常 响铃模式(让默认的套接字由主动变为被动 listen) tcp_server_socket.listen(128) print("----1----") #4.等待别人的电话到来(等待客户端的链接 accept) new_client_socket,client_addr = tcp_server_socket.accept() print("----2----") print(client_addr) #接收客户端发送过来的请求 recv_data = new_client_socket.recv(1024) print(recv_data) #回送一部分数据给客户端 new_client_socket.send("hahahaha---------ok------".encode("utf-8")) #关闭套接字 new_client_socket.close() tcp_server_socket.close() if __name__ == "__main__": main()