• 网络编程之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()
  • 相关阅读:
    win10如何将现有的桌面壁纸找出来
    js 显示网站当前访客是几位访客
    SELECT DISTINCT 取列中所有不重复的值
    mysql5.6和8.0中都没有len()函数,获取字符串长度的函数是length()
    TOP 子句用于规定要返回的记录的数目。
    sqlmap提示you haven't updated sqlmap for more than 126 days!!!
    利用代码生成a-z的所有字母的指定长度的组合字典
    生成图形验证码 将图形验证码流写到前台
    JDK历史版本
    mysql 数据库隔离级别
  • 原文地址:https://www.cnblogs.com/zhangcaiwang1/p/9741482.html
Copyright © 2020-2023  润新知