Python教程12

Python教程12

  1.udp发送数据:

import socket


def main():
    # 创建一个udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 第一个参数是ipv4协议,第二个参数是udp
    # 使用套接字发送数据,第一个参数是发送数据,第二个参数是一个元祖
    # udp_socket.sendto(b"jnjhhjdik111jj5555", ("192.168.1.7", 8080))  # 使用b表示发送数据流是bit
    while True:
        # 从键盘获取数据
        send_data = input("请输入要发送的数据:")
        if send_data == "exit":
            break
        udp_socket.sendto(send_data.encode("utf-8"), ("192.168.1.7", 8080))  # 多采用.encode("utf-8")设置数据流的编码
    # 关闭套接字
    udp_socket.close()


if __name__ == "__main__":
    main()

  2.udp接收数据

import socket


def main():
    # 1.创建套接字
    udp_socket2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 2.绑定本地信息,如果一个网络程序不绑定,则系统会随机分配
    localaddr = ("", 7788)  # ip地址和端口号,IP一般不用谢,表示本机的任何一个IP
    udp_socket2.bind(localaddr)
    while True:
        # 3.接收数据,1024表示接收的最大字节数
        recv_date = udp_socket2.recvfrom(1024)
        # 4.打印接收的数据
        print(recv_date)
        # 接收到的元组数据(b'http://www.cmsoft.cn', ('192.168.1.7', 8080))前面是数据信息,后面发送方的IP和端口
        recv_msg = recv_date[0]  # 接收到的数据
        send_addr= recv_date[1]  # 发送方的信息,是个元组
        print("发送方信息:%s   发送的数据:%s" % (str(send_addr), recv_msg.decode("gbk")))  # 发送的英文不用解,Windows默认发送的gbk解码,Ubuntu是utf-8
    # 5.关闭套接字
    udp_socket2.close()


if __name__ == '__main__':
    main()

  3.udp聊天工具

import socket


def send_msg(udp_socket):
    """发送信息"""
    # 定义发送的需要的信息
    dest_ip = input("请输入对方的IP:")
    dest_port = int(input("请输入对方端口号:"))
    send_data = input("请输入需要发送的信息: ")
    udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))


def recv_msg(udp_socket):
    """接收数据"""
    recv_data = udp_socket.recvfrom(1024)
    print("发送方的IP%s ,发送的信息%s" % (str(recv_data[1]), recv_data[0].decode("gbk")))


def main():
    # 创建套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 绑定信息
    loacladdr = ("", 7788)
    udp_socket.bind(loacladdr)
    # 循环处理发送接收数据
    while True:
        print("--------------XXX聊天工具-------------")
        print("1 .发送信息")
        print("2 .接收信息")
        print("3 .退出系统")
        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()

   4.tcp_client发送信息

import socket


def main():
    # 1.创建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 2.连接服务器
    # tcp_socket.connect(("192.168.1.7", 7890))
    server_ip = input("请输入服务器IP:")
    server_port = int(input("请输入服务器的端口:"))
    server_addr = (server_ip, server_port)
    tcp_socket.connect(server_addr)
    # 3.发送接收数据
    send_data = input("请输入要发送的数据:")
    tcp_socket.send(send_data.encode("gbk"))
    # 4.关闭套接字
    tcp_socket.close()


if __name__ == "__main__":
    main()

  5.tcp_server接收、发送数据

import socket


def main():
    # 1.创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 2.绑定信息
    tcp_server_socket.bind(("", 7890))
    # 3.设置套接字为监听状态,默认都写128
    tcp_server_socket.listen(128)
    while True:
        print("等待一个客户端来连接........")
        # 4.客户端连接
        new_client_socket, client_addr = tcp_server_socket.accept()
        print("打印连接的客户端信息:%s" % str(client_addr))
        # 循环接收、发送信息
        while True:
            # 5.接收/发送客户端信息
            recv_data = new_client_socket.recv(1024)
            print("打印接收到客户端的信息:%s" % recv_data.decode("gbk"))
            # 注意客户端未发送数据,表示客户端close,(客户端是不能发送为空值得),有数据则需要服务器处理
            if recv_data:
                new_client_socket.send("服务器接收成功......ok ....".encode("gbk"))  # Windows用gbk,Linux用utf-8
            else:
                break
        # 6.关闭套接字
        new_client_socket.close()
        print("已经服务完毕......")
    tcp_server_socket.close()


if __name__ == '__main__':
    main()

  6.文件下载client

import socket


def main():
    # 1.创建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 2.获取服务器的IP和端口
    dest_ip = input("请输入服务器IP:")
    dest_port = int(input("请输入端口:"))
    # 3.连接服务器
    tcp_socket.connect((dest_ip, dest_port))
    # 4.获取下载的文件名
    download_file_name = input("请输入需要下载的文件名:")
    # 5.将文件名发送给服务器
    tcp_socket.send(download_file_name.encode("gbk"))
    # 6.接收文件中的数据
    recv_data = tcp_socket.recv(1024)
    # 如果有读取到数据,则下载,没有读取到则服务器不发送数据,接收到为空
    if recv_data:
        # 7.保存数据到文件,新建文件多用with open
        with open("[新]" + download_file_name, "wb") as f:
            f.write(recv_data)
    # 8.关闭套接字
    tcp_socket.close()


if __name__ == '__main__':
    main()

  7.文件下载server

import socket


def send_file_2_client(new_client_socket, client_addr):
    file_name = new_client_socket.recv(1024).decode("gbk")
    print("客户端s%需要下载的文件:s%" % (str(client_addr), file_name))
    print("开始发送数据给客户端.....")
    file_content = None
    # 打开文件
    try:
        f = open(file_name, "rb")
        file_content = f.read()
        f.close()
    except Exception as ret:
        print("没有下载的文件。。。。")
    # 发送文件
    if file_content:
        new_client_socket.send(file_content)


def main():
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_socket.bind(("", 7890))
    tcp_socket.listen(128)
    while True:
        new_client_socket, client_addr = tcp_socket.accept()
        # 调用下载方法
        send_file_2_client(new_client_socket, client_addr)
        new_client_socket.close()
    tcp_socket.close()


if __name__ == '__main__':
    main()

 

 

posted @ 2018-12-10 23:33  君,子觞  阅读(170)  评论(0编辑  收藏  举报