通讯的时候, 双方必须知道对方的标识, 比如发邮件必须知道对方的邮件地址。 互联网上每一个计算机的惟一标识就是IP地址, 相似 123.123.123.123 。html
IP地址其实是一个32位整数(称为IPv4) , 以字符串表示的IP地址,如 192.168.0.1 其实是把32位整数按8位分组后的数字表示, 目的是便于阅读。 IPv6地址其实是一个128位整数, 它是目前使用的IPv4的升级版, 以字符串表示。相似于 2001:0db8:85a3:0042:1000:8a2e:0370:7334 。
在两台计算机通讯时, 只发IP地址是不够的, 由于同一台计算机上跑着多个网络程序。 一个IP包来了以后, 究竟是交给浏览器仍是QQ, 就须要端口号来区分。web
每一个网络程序都向操做系统申请惟一的端口号, 这样, 两个进程在两台计算机之间创建网络链接就须要各自的IP地址和各自的端口号。
为了把全世界的全部不一样类型的计算机都链接起来, 就必须规定一套全球通用的协议,你们把互联网的协议简称TCP/IP协议编程
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))
import socket def 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()
图事后贴上服务器