网络编程基础(一)
-
- TCP/IP协议
- OSI/RM协议
- 特点:独立于计算机硬件和操作系统,统一分配网络地址,提供可靠服务,隔离了物理网络的硬件差异
- 协议分层(百度):网络接口层:IEE802.3(以太网协议集),IEEE802.4(令牌环网);网络层(IP);传输层(tcp/udp);应用层(FTP/HTTP/SMTP/DNS)
- IP地址和端口
- TCP/IP协议
- 网络编程基础(二)
- UDP协议
- TCP协议
- 套接字Socket
- TCP连接的端点称作套接字
- 表示方法:IP地址:端口号,一个socket就是:(ip地址:端口号)
- 一个TCP连接就是两个套接字,也就是{(IP地址:端口号),(IP地址:端口号)}
- 每一条TCP连接被两个套接字确定,同一个ip地址可以有不同的TCP连接,同一个端口号可以出现在不同的TCP连接中
- TCP和UDP的不同点
- TCP先建立连接,再通信,最后释放连接,udp不用连接
- TCP保证数据可靠交付;TCP不保证可靠交付,用户自行处理可靠性
- TCP连接开销大,UDP小;TCP使用实时性低,数据可靠性高的场合,UDP适合实用性高,数据可靠性低的场合
- TCP和UDP的相同点
- 都位于TCP/IP协议的第四层
- 为应用层提供服务,都要通过网际层来一线数据的传输ICMP协议
- TCP协议
- HTTP,FTP,TELNET,POP,SMTP
- UDP协议
- TFTP,DNS,SNMP,VOIP,QQ
- 服务器端socket的建立
- C/S模式简介:客户/服务器模式,客户端为主动向服务器发出服务请求的一方。服务器一般在系统启动时自动调用运行,等待客户机的请求
与C/S模式相对的是B/S(浏览器/服务器模式),客户端使用同意的浏览器,而不用装门部署,服务器和浏览器使用HTTP协议进行通信 - 套接字网络编程
- TCP通信
- UDP通信
- C/S模式简介:客户/服务器模式,客户端为主动向服务器发出服务请求的一方。服务器一般在系统启动时自动调用运行,等待客户机的请求
- Python中的socket
- socket对象是支持网络通信的,socket对象支持使用TCP/UDP协议进行网络通信(只能选择其中一个协议)
- socket编程所需要的对象函数和常量
- 创建套接字:socket.socket(family,type) family表示套接字使用什么版本协议 Type=SOCK_STREAM(使用TCP) type=sock_DGRAM(UDP协议)
- 服务器端套接字的方法
- bind(address)绑定,address为(ip:port):将套接字绑定到本地主机的ip或者端口上;
- listen(backlog):开始Tcp转入连接。backlog拒绝连接前允许操作系统挂起的连接数,1-5
- accept():接收TCP连接,并返回连接上的套接字对象和客户端地址构成的元组。返回的连接上的套接字对象可用于接收和发送信息
- 客户端socket对象的方法
- connect(address),address=(hostname,port)构成的元组,建立与服务器间的连接
- TCP协议的socket收发数据的方法
- recv(【buffersize】):接收数据,参数为接收最大数据量,返回接收的数据
- send(bytes)通过socket发送数据
- sendall(bytes)通过socket发送数据(返回前将数据都发送出去)
- UDP协议的socket收发数据方法
- recvfrom(与上面类似)
- sendto(bytes,address)发送的字节和指定发送的目的地址
- 关闭socket;close()
- 其他相关函数
- gethostname()返回本地主机名
- gethostbyname_ex(hostname)#返回元组(hostname,aliaslist,ipaddrrlist)
- 用socket建立TCP服务器端方法
- 基本步骤
- 创建套接字并绑定地址,开始监听连接,接收连接并收发数据,关闭套接字
-
View Code
#coding=gbk import socket HOST = '' PORT = 321 s=socket.socket() s.bind((HOST,PORT)) s.listen(5) client,addr=s.accept()#接收客户端的连接,返回一个客户端, print('client address:',addr) while True: data = client.recv(1024)#接收数据 if not data:#为空,断开连接 break else: print('receive data :',data.decode('utf-8'))#数据不为空,输出 client.send(data)#将数据发挥客户端 client.close() s.close()
- 基本步骤