博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python教程12
阅读量:6654 次
发布时间:2019-06-25

本文共 5420 字,大约阅读时间需要 18 分钟。

Python教程12

  1.udp发送数据:

import socketdef 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 socketdef 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 socketdef 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 socketdef 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 socketdef 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 socketdef 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 socketdef 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()

 

 

转载于:https://www.cnblogs.com/jun1/p/10091721.html

你可能感兴趣的文章
Redis 客户端安装与远程连接图解
查看>>
BZOJ3328: PYXFIB(单位根反演?)
查看>>
使用EasyUI的treegrid犯的个低级错误
查看>>
jmeter 登录并发 (此文章有待修改)
查看>>
spring事务测试2,为了解决spring事务测试1
查看>>
扩展卡特兰数
查看>>
ajax对象。同步与异步及ajax发送请求
查看>>
event.stopPropagation 阻止触发父元素的绑定事件
查看>>
[开源] KJFramework.Message 智能二进制消息框架
查看>>
appcan本地数据库,uexDataBaseMgr插件
查看>>
HTML学习笔记一基本标签
查看>>
Mac、nvm、node/npm
查看>>
【转载】随机函数rand()
查看>>
二分查找 BestCoder Round #36 ($) Gunner
查看>>
PowerShell【Do While、Do Until篇】
查看>>
试验添加RAC(ORA10G)节点
查看>>
面试题编程题04-python sort和sorted用法与区别
查看>>
UWP是什么东西
查看>>
do not track
查看>>
ios判断是否有中文
查看>>