14、Python网络编程基础

目录

计算机网络基础知识

网络体系结构

请参考
https://blog.csdn.net/leeezm/article/details/77823108

网络协议&应用层协议&传输层协议

请参考
https://www.cnblogs.com/ImBit/p/5513401.html

MAC地址

请参考
https://baike.baidu.com/item/MAC%E5%9C%B0%E5%9D%80/1254181?fr=aladdin


Socket编程

  在计算机通信领域,Socket被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 Socket这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

  Socket的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的URL,向服务器发起请求,服务器分析接收到的URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户。

  Socket编程又可以分为两种形式—TCP与UDP,TCP是带有数据认证的,确保数据从一方能准确的传送到另一方;UDP是不带数据认证的,一方只管发,一方只管收

TCP编程

Server端的流程如下:
a、首先是创建一个TCP的套接字
b、bind()对应的端口和地址
c、然后进行listen(1),1表示不阻塞
d、accept()等待一个客户端连接
e、然后在循环内部用recv进行接收消息
f、接收到退出字符exit则退出while循环,关闭连接、关闭套接字;否则输出接收到的字符串

# !/usr/bin/env python
# encoding: utf-8

import socket

if __name__ == '__main__':
    host='127.0.0.1'
    port = 60000
    s = socket.socket(socket.AF_INET)
    #绑定socket
    s.bind((host, port))
    s.listen(1)
    print("Listening at port:", port)
    conn, addr = s.accept()
    print("Connected by", addr)
    while True:
        data = conn.recv(1024)
        data = data.decode()
        if -1 != data.find('exit'):
            break
        print("receiveed message:", data)
        conn.sendall(data.encode())
    conn.close()
    s.close()

    print("main end.")

Client端的流程如下:
a、首先是创建一个TCP的套接字
b、connect ()对应的端口和地址
c、在循环内部用sendall、recv进行发送、接收消息
d、输入退出字符exit则退出while循环,关闭连接、关闭套接字
e、服务器接收到exit同样退出

# !/usr/bin/env python
# encoding: utf-8

import socket
import sys

if __name__ == '__main__':
    host='127.0.0.1'
    port = 60000
    s = socket.socket(socket.AF_INET)
    try:
        #连接服务器
        s.connect((host, port))
    except Exception as e:
        print(e)
        sys.exit()

    while True:
        c = input('Input the content you want to send:')
        #发送数据
        s.sendall(c.encode())
        #从服务器端接收数据
        data = s.recv(1024)
        data = data.decode()
        print("received:", data)
        if -1 != c.lower().find('exit'):
            break

    #关闭连接
    s.close()

    print("main end.")

UDP编程

UDP属于无连接协议,相对来说比较简单
Server端的流程如下:
a、首先是创建一个UDP的套接字
b、循环中,用recvfrom阻塞等待消息的到来
c、接收到退出字符exit则退出while循环,关闭套接字;否则输出接收到的字符串

扫描二维码关注公众号,回复: 2993715 查看本文章
# !/usr/bin/env python
# encoding: utf-8

import socket

if __name__ == '__main__':
    host='127.0.0.1'
    port = 60000
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)#UDP
    #绑定socket
    s.bind((host, port))
    while True:
        data, addr = s.recvfrom(1024)
        data = data.decode()
        print("receiveed message:{0}, addr:{1}".format(data, addr))
        if -1 != data.find('exit'):
            break
    s.close()

    print("main end.")

Client端的流程如下:
a、首先是创建一个UDP的套接字
b、向这个套接字用sendto发送一些数据,无论是否发送成功
c、输入退出字符exit则退出while循环,关闭连接、关闭套接字
d、服务器接收到exit同样退出

# !/usr/bin/env python
# encoding: utf-8

import socket

if __name__ == '__main__':
    host='127.0.0.1'
    port = 60000
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    while True:
        c = input('Input the content you want to send:')
        s.sendto(c.encode(), (host, port))
        if -1 != c.lower().find('exit'):
            break
    #关闭连接
    s.close()

    print("main end.")

更高级的用法selectors

封装了系统底层对socket的支持,已经封装好了有epoll(epoll只能在linux上使用)和selector
更多知识请参考
https://www.cnblogs.com/guobaoyuan/p/6841904.html


猜你喜欢

转载自blog.csdn.net/zengraoli/article/details/81320668