第十二章-网络编程

1 TCP/IP

  IP协议赋值吧数据从一台计算机通过网络发送到另一台计算机. 数据是被分割成一个个小块, 然后通过IP包发送出去的. 其中如何在负载的网络链路中传送的是通过路由器进行转发达到最终的目的地

  TCP协议是建立在IP协议之上的, TCP协议负责在两台计算机之间建立可靠连接, 而且保证数据包按照顺序到达, 主要是依靠握手协议和对数据包进行编号, 确保数据被对方收到

  应用成的HTTP和SMTP等协议都是基于TCP协议的

  IP包的组成: 源IP地址, 目的IP地址, 源端口, 目的端口, 数据部分

2 TCP编程

  套接字(socket)一般是指 IP+端口

  表示打开了一个网络连接

  在TCP中, 主动发起连接的叫做客户端, 被动相应的叫做服务器

  1) 客户端的使用方法

  创建socket对象

import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    其中socket.AF_INET表示指定IPv4的协议, 如果使用IPv6的协议应该使用socket.AF_INET6

    socket.SOCK_STREAM表示指定使用面向流的TCP协议

  客户端连接服务器

client.connect(("127.0.0.1", 8080))

    其中的套接字内容是一个元组形式, 第一个元素是IP地址或者域名, 第二个元素是端口号

  客户端发送内容

message = input(">> ")
if not message:
    continue
if message == "q":
    break
client.send(message.encode("utf8"))

    客户端使用send方法发送数据, 注意的是, 发送的内容一定是bytes类型的数据

  客户端接受数据

buffer = []
while True:
    d = client.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = ‘‘.join(buffer).decode("utf8")

    客户端使用recv()方法来获取服务器发送的数据, 其中设置1024表示最多可以接受1024个字节. 服务器发送过来的数据也是bytes类型的数据

  关闭客户端

client.close()

  2) 服务器的使用方法

  创建一个套接字对象并绑定监听的IP地址和端口

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("127.0.0.1", 8080))
server.listen(5)

    其中可以使用0.0.0.0绑定到所有的网络地址, 可以使用127.0.0.1绑定到本机IP地址

    其中端口号是0~65535, 其中0~1024是系统的端口号, 绑定系统端口号需要管理员权限

    其中listen()方法表示监听, 数字5表示缓存池的大小(等待链接的最大数量)

  接受请求并处理内容

while True:
    conn, addr = server.accept()
    while True:
        data = conn.recv(1024)
        if not data:
            break
        try:
            res = subprocess.Popen(data.decode("utf8"), shell=True, stdout=subprocess.PIPE)
            res = res.stdout.read()
        except:
            res = "输入的命令有误".encode("gbk")
        conn.send(res)
    conn.close()

  关闭服务器

server.close()

3 UDP编程

  UDP是面向无连接的协议

  使用UDP只需要知道目的IP和端口, 就可以发送内容, 不需要链接, 也不管是否能够送达

  服务器的程序编写

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind((‘127.0.0.1‘, 8989))

while True:
    data, addr = server.recvfrom(1024)
    print(data.decode("utf8"))
    server.sendto("客户端你好!".encode("utf8"), addr)

  客户端的编写

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
dateList = ["你好", "北京", "我来了!"]
for data in [i.encode("utf-8") for i in dateList]:
    client.sendto(data, (‘127.0.0.1‘, 8989))
    print(client.recv(1024).decode(‘utf-8‘))

client.close()

  总的来说:

    UDP在创建的时候是用的是socket.SOCK_DGRAM而不是socket.SOCK_STREAM

    服务端使用只需要绑定, 不需要监听, 也不需要接受

    客户端使用不需要连接, 直接就能发送和接受

    
时间: 2024-10-02 08:00:14

第十二章-网络编程的相关文章

[CSAPP笔记][第十二章并发编程]

第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟悉的例子. 我们主要将并发看做是一种操作系统内核用来运行多个应用程序的机制. 但是,并发不仅仅局限于内核.它也可以在应用程序中扮演重要的角色. 例如 Unix信号处理程序如何允许应用响应异步事件 例如:用户键入ctrl-c 程序访问虚拟存储器的一个未定义的区域 其他情况 访问慢速I/O设备 当一个应

第十二章 并发编程 学习笔记

第十二章 并发编程 进程是程序级并发,线程是函数级并发. 三种基本的构造并发程序的方法: 进程:每个逻辑控制流是个一个进程,由内核进行调度和维护. I/O多路复用:应用程序在一个进程的上下文中显式地调度他们自己的逻辑流. 线程:运行在单一进程上下文中的逻辑流,由内核进行调度. 12.1 基于进程的并发编程 构造并发程序最简单的方法就是用进程. 使用大家都很熟悉的函数例如: fork exec waitpid 关于在父.子进程间共享状态信息:共享文件表,但不共享用户地址空间. 进程又独立的地址空间

第十二章 并发编程

第十二章 并发编程 三种基本的构造并发程序 进程:每个逻辑控制流是一个进程,由内核进行调度,进程有独立的虚拟地址空间 I/O多路复用:逻辑流被模型化为状态机,所有流共享同一个地址空间 线程:运行在单一进程上下文中的逻辑流,由内核进行调度,共享同一个虚拟地址空间 常用函数: fork exec waitpid 基于I/O多路复用的并发事件驱动服务器 事件驱动程序:将逻辑流模型化为状态机. 状态机: 状态 输入事件 转移 对于状态机的理解,参考EDA课程中学习的状态转换图的画法和状态机. 整体的流程

Python基础教程(第十四章 网络编程)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5538341.html______ Created on Marlowes 本章将会给读者展示一些例子,这些例子会使用多种Python的方法编写一个将网络(比如因特网)作为重要组成部分的程序.Python是一个很强大的网络编程工具,这么说有很多原因,首先,Python内有很多针对常见网络协议的库,在库顶部可以获得抽象层,这样就可以

二十二、网络编程

网络编程的一些基本概念: 1.地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议. 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址. 收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源. 2.tcp协议:TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须

第十四章 网络编程

1.网络基础 参考:http://www.cnblogs.com/Eva-J/articles/8066842.html 2.软件开发架构 C/S架构:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的. B/S架构:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的.(其实B/S架构也是一种C/S架构) 3.计算机网络 1.在网络中的两个程序通过IP和PORT找到对方 IP地址是指互联网协议

深入理解计算机系统 第十二章 并发编程

如果逻辑控制流在时间上重叠,那么它们就是并发的(concurrent) 这种常见的现象称为并发(concurrency),出现在计算机系统的许多不同层面上. 并发不仅仅局限于内核,它也可以在应用程序中扮演重要角色. 应用级并发在以下情况中都是很有用的: 1.访问慢速 I/O 设备 当一个应用正在等待来自慢速 I/O 设备(例如磁盘)的数据到达时,内核会运行其它进程,使 CPU 保持繁忙.每个应用都可以按照类似的方式,通过交替执行 I/O 请求和其他有用的工作来利用并发. 2.与人交互 和计算机交

深入理解计算机系统 第十二章 并发编程 (1)

现代操作系统提供了三种基本的构造并发程序的方法: 进程.用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护,因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信(interprocess communication,IPC)机制. I/O多路复用.在这种形式的并发编程中,应用程序在一个进程的上下文中显式的调度它们自己的逻辑流.逻辑流被模型化为状态机,数据到达文件描述符后,主程序显式的从一个状态转换到另一个状态.因为程序是一个单独的进程,所以所有的流都共享同一

深入理解计算机系统 第十二章 并发编程 part1 第二遍

三种构造并发程序的方法及其优缺点 1.进程 用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护.因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信机制. 优点: 由于进程有独立的地址空间,所以一个进程不可能不小心覆盖另一个进程的虚拟内存,这就消除了许多令人迷惑的错误 缺点: (1)还是由于进程有独立的地址空间,使得进程共享状态信息变得更加困难.为了共享信息,它们必须使用显式的 IPC(进程间通信)机制. (2)由于进程控制和 IPC 的开销很高,所以这种方