黑马程序员技术交流社区

标题: 【上海校区】Python高级网络编程系列之基础篇 [打印本页]

作者: fangtaoa    时间: 2018-8-14 09:17
标题: 【上海校区】Python高级网络编程系列之基础篇
本帖最后由 fangtaoa 于 2018-8-14 09:41 编辑

前言:
    在这篇文章当中,主要简单介绍一些TCP、UDP协议和Socket编程的简单知识点,如果想要更深入的了解这部分的知识点,可以期待后面的文章,或者可以自己去招找些书籍去巩固这方面的基础知识。

一、Socket简介
1、不同电脑上的进程如何通信?
  进程间通信的首要问题是如何找到目标进程,也就是操作系统是如何唯一标识一个进程的!
  在一台电脑上是只通过进程号PID,但在网络中是行不通的,因为每台电脑的IP可能都是不一样的,因此TCP/IP协议族通过使用IP地址+端口号的方式来标识任意一台主机的应用进程。
  因此,利用IP地址 + 协议 + 端口号就可以用来标识网络进程了,网络中可以利用这个标识来与其他进程通信。

2.什么是socket
  Socket简称为套接字,是进程间通信的一种方式,它与其他进程间通信的一个不同之处在于:它能实现不同主机间的进程间通信,网络上各种各样的服务大多是基于Socket来完成的。

二、TCP简介
  1.介绍:TCP协议,传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
  2.通信流程:建立连接、数据传输、终止连接,就类似我们生活中的“打电话”。
三、TCP特点:
   1.面向连接:通信前必须先建立连接才能进行数据传输,双方都必须为该连接分配必要的系统内核资源。
   2.可靠传输:主要体现在:
     1). TCP采用发送应答机制:TCP发送的每个报文都必须得到接收方的应答才能成功传输该报文。
     2). 超时重传:如果发出的报文在一段时间内没有收到应答那么就重新发送这个报文段。此外,TCP是为每个包都分配一个序号,用来保证不会发送方丢包和用于在接收端重组。
     3). 错误检验:TCP用一个校验和函数来校验数据是否有误,
       4). 流量控制和阻塞管理:用来避免主机发送得过快而使接收方来不及全部收下。

四、UDP协议
  UDP是一中无需建立连接就能通信的协议,只需要发送数据即可。因此一般适用于广播的应用程序。

五、TCP与UDP的不同点

六、TCP/IP协议族
  互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,因此一般把互联网的协议简称为TCP/IP协议族。

七、TCP/IP协议传输示意图
  以QQ间发送消息为例!
  

八、TCP通信模型
  主要是使用TCP协议来进行通信!
  

  注意点:



一个简单的socket服务器代码:

import socket


def main():
    # 1.创建TCP套接字
    tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置地址可重用
    tcp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    # 2.把套接字绑定到主机上
    tcp_sock.bind(('', 6060))
    # 3.被动套接字
    tcp_sock.listen(128)
    print('{}正在监听中'.format(tcp_sock.getsockname()))
    # 4.与客户端进行连接
    while True:
        client, addr = tcp_sock.accept()
        print('已经连接到了客户端:{}'.format(addr))
        # 接收来自客户端的消息
        data = client.recv(1024)
        print(data.decode('utf-8'))
        # 消息一经发送完毕就断开了连接
        client.close() # 短连接

    tcp_sock.close()


if __name__ == '__main__':
    main()


作者: 不二晨    时间: 2018-8-16 16:59
奈斯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2