python学习之网络编程

一、socket模块
    socket模块提供了底层的接口,通过socket模块可以实现不同计算机的通信
    ip+port定位了计算机中应用程序的具体位置,socket绑定ip+port来建立链接,socket的方法详情:
    socket(family, type, proto): socket函数创建一个socket对象,使用socket对象创建连接,
    family协议族,默认AF_INET,ipv4协议,type,socket类型,proto协议类型
    
    bind((ip, port)): 绑定服务器地址
    listen(n): 监听socket创建的链接, n代表指定连接队列数,
    connect((‘127.0.0.1‘, 8080)): 连接到服务端
    accept():等待客户端连接,返回连接对象和客户端ip组成的元组
    recv(n): 接收数据,n代表接受固定的数据
    send(data): 发送数据
    
    例子:模拟客户端服务端通信
    server:
    #!/usr/bin/python
    # --*-- coding: utf-8 --*--
    
    import socket
    phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    phone.bind((‘127.0.0.1‘, 8080))
    
    phone.listen(5)
    
    print(‘starting...‘)
    
    conn, addr = phone.accept()
    print(conn)
    print(‘client addr: ‘, addr)
    print(‘ready to read msg‘)
    client_msg = conn.recv(1024)
    print(‘client msg: %s‘ %(client_msg))
    conn.send(client_msg.upper())
    conn.close()
    phone.close()
    
    client
    #!/usr/bin/pytthon
    # --*-- coding: utf-8 --*--
    import socket
    phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    phone.connect((‘127.0.0.1‘, 8080))
    
    phone.send(‘hello‘.encode(‘utf-8‘))
    
    back_msg = phone.recv(1024)
    print(back_msg.decode(‘gbk‘))
    phone.close()
    
    模拟循环发送接收数据
    server
    import socket
    phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    phone.bind((‘127.0.0.1‘, 8080))
    phone.listen(5)
    
    while True:
        print(‘starting...‘)
        conn, addr = phone.accept()
        print(‘client addr ‘, addr)
        while True:
            try:
                client_msg = conn.recv(1024)
                if not client_msg: break
                print(‘client_msg: %s‘ %client_msg)
                conn.send(client_msg.upper())
            except Exception:
                break
        conn.close()
    phone.close()
    
    client
    import socket
    phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    phone.connect((‘127.0.0.1‘, 8080))
    
    while True:
        msg = input(">>: ")
        if not msg: continue
        phone.send(msg.encode(‘utf-8‘))
        back_msg = phone.recv(1024)
        print(back_msg.decode(‘utf-8‘))
    phone.close()
    
    模拟远程执行命令,并返回结果
    server
    import socket
    import subprocess
    phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    phone.bind((‘127.0.0.1‘, 8080))
    phone.listen(5)
    
    while True:
        print(‘starting...‘)
        conn,addr = phone.accept()
        print(‘client addr: ‘, addr)
        while True:
            try:
                cmd = conn.recv(1024)
                if not cmd: break
                res = subprocess.Popen(cmd.decode(‘utf-8‘), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                err = res.stderr.read()
                if err:
                    cmd_res = err
                else:
                    cmd_res = res.stdout.read()
                conn.send(cmd_res)
            except Exception:
                break
        conn.close()
    phone.close()
    
    client
    import socket
    phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    phone.connect((‘127.0.0.1‘, 8080))
    
    while True:
        cmd = input(‘>>: ‘).strip()
        if not cmd: continue
        phone.send(cmd.encode(‘utf-8‘))
        back_msg = phone.recv(1024)
        print(back_msg.decode(‘gbk‘))
    phone.close()
    
    粘包现象,数据包无规则断开,出现不希望的断开现象
    server
    from socket import *
    import time
    tcp_server = socket(AF_INET, SOCK_STREAM)
    tcp_server.bind((‘127.0.0.1‘, 8080))
    tcp_server.listen(5)
    
    conn, addr = tcp_server.accept()
    res1 = conn.recv(5)
    res2 = conn.recv(5)
    res3 = conn.recv(7)
    print(res1.decode(‘gbk‘))
    print(res2.decode(‘gbk‘))
    print(res3.decode(‘gbk‘))
    
    client
    from socket import *
    import time
    
    tcp_client = socket(AF_INET, SOCK_STREAM)
    tcp_client.connect((‘127.0.0.1‘, 8080))
    
    tcp_client.send(‘hello world‘.encode(‘utf-8‘))
    time.sleep(5)
    tcp_client.send(‘egon666‘.encode(‘utf-8‘))
时间: 2024-08-05 12:21:26

python学习之网络编程的相关文章

python学习之网络编程基础

引入场景:客户与银行关系 银行职员负责给客户提供取钱服务,客户通过账户密码跟银行职员建立合作关系.此时银行职员就可以作为服务器,当用户A取完钱后他需要等待下一个用户的接入,用户的账号密码就是建立合作关系的凭据.------简单的客户端/服务器架构模型. 客户端/服务器网络编程过程 一:创建套接字(通信端点) AF_XXX解释:地址家族名称,AF:Address Family 基于文件套接字 AF_UNIX 基于网络套接字 AF_INET 代表ipv4  (python网络编程中常用的套接字)  

python 学习5 网络编程-TCP/UDP

摘抄自:廖雪峰的官方网站:http://www.liaoxuefeng.com/ TCP客户端和服务器端代码: #coding=utf-8 #客户端程序TCP 连接 import socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('127.0.0.1',9999)) print(s.recv(1024)) for data in ['Michael','Tracy','Sarah']: s.send(data

Python学习记录-socket编程

Python学习记录-socket编程 学习 python socket Python学习记录-socket编程 1. OSI七层模型详解 2. Python socket 3. socket()函数 4. TCP socket通信流程 5. Python Internet 模块 1. OSI七层模型详解 以上图见:http://blog.csdn.net/yaopeng_2005/article/details/7064869 其它详情可参考:socket网络基础 2. Python sock

Python四大主流网络编程框架

目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实.但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django.Tornado.Flask.Twisted. 网络框架及MVC架构 所谓网络框架是指这样的一组Python包,它能够使开发者专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议.线程.进程等方面.这样能大大提高开发者的工作效率,同时提高网络应用程序的质量. 在目前Py

python高级之网络编程

python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说到网络通信,那就不得不说TCP/IP协议簇的OSI七层模型了,这个东西当初在学校都学烂了...(PS:毕竟本人是网络工程专业出身...) 简单介绍下七层模型从底层到上层的顺序:物理层(定义物理设备的各项标准),数据链路层(mac地址等其他东西的封装),网络层(IP包头的的封装),传输层(TCP/UD

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

java基础学习总结——网络编程

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——网络编程 一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程. 二.网络通信协议及接口 三.通信协议分层思想 四.参考模型 五.IP协议 每个人的电脑都有一个独一无二的IP地址,这样互相通信时就不会传错信息了. IP地址是用一个点来分成四段的,在计算机内部IP地址是用四个字节来表示的,一个字节代表一段,每一个字节代表的数最大只能到达255. 六.TCP协议和UD

IOS学习笔记 -- 网络编程

一.HTTP协议1.面试题: 聊一下HTTP协议(表达对HTTP协议的看法)* HTTP协议的全称: 超文本传输协议, 定制传输数据的规范(客户端和服务器之间的数据传输规范)* 描述HTTP协议完整的通信过程 2.通信过程1> 请求* 客户端 --> 服务器* 请求的内容a."请求行" : 请求方法\请求资源路径\HTTP协议版本GET /MJServer/login?username=123&pwd=123&method=get&type=JSON

Java:进阶学习(1)——网络编程

Java:进阶学习(1)--网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket方法 getInetAddress();    远程服务端的IP地址 getPort();    远程服务端的端口 getLocalAddress()    本地客户端的IP地址 getLocalPort()    本地客户端的端口 getInputStream();