博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python大佬养成计划----socket网络编程
阅读量:5875 次
发布时间:2019-06-19

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

网络通信的三要素

  • IP

通信的时候, 双方必须知道对方的标识, 好比发邮件必须知道对方的邮件地址。 互联网上每个计算机的唯一标识就是IP地址, 类似 123.123.123.123 。

IP地址实际上是一个32位整数(称为IPv4) , 以字符串表示的IP地址,如 192.168.0.1 实际上是把32位整数按8位分组后的数字表示, 目的是便于阅读。IPv6地址实际上是一个128位整数, 它是目前使用的IPv4的升级版, 以字符串表示。类似于 2001:0db8:85a3:0042:1000:8a2e:0370:7334 。
  • 端口port

在两台计算机通信时, 只发IP地址是不够的, 因为同一台计算机上跑着多个网络程序。 一个IP包来了之后, 到底是交给浏览器还是QQ, 就需要端口号来区分。

每个网络程序都向操作系统申请唯一的端口号, 这样, 两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。
  • TCP/UDP协议

为了把全世界的所有不同类型的计算机都连接起来, 就必须规定一套全球通用的协议,大家把互联网的协议简称TCP/IP协议

socket编程

Socket是网络编程的一个抽象概念。 通常我们用一个Socket表示“打开了一个网络链接”, 而打开一个Socket需要知道目标计算机的IP地址和端口号, 再指定协议类型即可。

import socket# socket.gethostname()当不传入参数时,返回本机主机名print(socket.gethostname()) #DESKTOP-EN0LQJH#域名(英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称#通过域名查找服务器IP地址print(socket.gethostbyname('www.baidu.com'))    #119.75.216.20#通过一个IPv4的地址来获取主机信息print(socket.gethostbyaddr('114.114.114.114'))#通过IP/port组合,访问服务器信息# 如果是AF_INET则格式为:(address, port),如果为AF_INET6,则返回(address, port, flow info, scope id)print(socket.getaddrinfo('www.xunlei.com',80))

图片描述

用socket实现简易的web服务器

import socketdef reply_info(socketObj):    # socketObj.send('ok')    with open('hello.html') as f:        socketObj.send(f.read().encode('utf-8'))if __name__=="__main__":    #1. 创建socket对象    socket_server = socket.socket()    #2. 绑定IP和端口    socket_server.bind(('192.168.1.165',9999))    print("服务器端已经启动9999端口......")    #3. 监听是否有客户端连接    socket_server.listen(5)    while True:        # 4. 接受客户端的连接        socket_client,address = socket_server.accept()        # 5. 接收客户端发来的信息        data = socket_client.recv(1024)        # 6. 与客户端进行交互, 返回给客户端信息        reply_info(socket_server)        socket_server.close()

图过后贴上

转载地址:http://zikix.baihongyu.com/

你可能感兴趣的文章
Revit API 创建带箭头的标注
查看>>
jetty启动报错Unsupported major.minor version 51.0
查看>>
Xamarin.Android开发实践(七)
查看>>
彩色图像上执行Mean Shift迭代搜索目标 ,维加权直方图 + 巴氏系数 + Mean Shift迭代...
查看>>
深入理解JavaScript系列
查看>>
strtol 函数用法
查看>>
eclipse内存溢出设置
查看>>
搭建jenkins环境(linux操作系统)
查看>>
VS 2015 GIT操作使用说明
查看>>
上海办理房产税变更
查看>>
每天一个linux命令(52):scp命令
查看>>
CMOS Sensor Interface(CSI)
查看>>
linq中的contains条件
查看>>
HDU 5590 ZYB's Biology 水题
查看>>
memcached 分布式聚类算法
查看>>
言未及之而言,谓之躁;言及之而不言,谓之隐;未见颜色而言,谓之瞽(gǔ)...
查看>>
MYSQL查询一周内的数据(最近7天的)
查看>>
Redis的缓存策略和主键失效机制
查看>>
禁止body滚动允许div滚动防微信露底
查看>>
Xtreme8.0 - Kabloom dp
查看>>