网络编程之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()

 

posted @ 2018-10-04 03:51  人生信条~~  阅读(317)  评论(0编辑  收藏  举报