python-day27(三次握手,四次挥手)

一. Osi七层

二.  三次握手 四次挥手(重点)

3次握手: A约吗>>>B约啊>>>A收到

4次挥手: A分手吧>>>B让我考虑下>>>.B分吧>>>>A再见

三. Tcp和Udp的区别

  TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。

    使用TCP的应用:Web浏览器;文件传输程序。

  UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、

    面向报文(数据包),尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。

四. Tcp和Udp协议下socket撰写方式

 Tcp服务端,客户端

 1 import socket
 2 
 3 server = socket.socket()
 4 ip_port = ('192.168.15.46',8001)
 5 server.bind(ip_port)
 6 
 7 server.listen()
 8 
 9 conn,addr = server.accept()
10 
11 while 1:
12     server_msg = input('wulaoban>>')
13     server_msg = server_msg.encode('utf-8')
14     conn.send(server_msg)
15 
16     from_client_msg = conn.recv(1024) #1024是一次性最大能接收的消息长度
17     from_client_msg = from_client_msg.decode('utf-8')
18     print(from_client_msg)
19 
20 conn.close()
21 server.close()
View Code
 1 import socket
 2 
 3 client = socket.socket()
 4 
 5 server_ip_port = ('192.168.15.46',8001)
 6 
 7 client.connect(server_ip_port)
 8 
 9 while 1:
10     from_server_msg = client.recv(1024)
11     from_server_msg = from_server_msg.decode('utf-8')
12     print('来自服务端的消息',from_server_msg)
13     client_msg = input('客户端>>>>')
14     client_msg = client_msg.encode('utf-8')
15     client.send(client_msg)
View Code

Udp服务端,客户端

 1 import socket
 2 
 3 udp_server = socket.socket(type=socket.SOCK_DGRAM)  #datagram 数据包的意思
 4 ip_port = ('192.168.15.49',8001)
 5 udp_server.bind(ip_port)
 6 print(1111)
 7 from_client_msg,server_addr = udp_server.recvfrom(1024) #消息数据类型都是bytes类型,阻塞
 8 print(22222)
 9 print(from_client_msg.decode('utf-8'))
10 print(server_addr)
11 udp_server.sendto(b'hello what?',server_addr)
12 
13 
14 udp_server.close()
View Code
 1 import socket
 2 
 3 udp_client = socket.socket(type=socket.SOCK_DGRAM)
 4 server_ip_port = ('192.168.15.49',8001)
 5 
 6 udp_client.sendto(b'hello',server_ip_port) #c参数1:发送的消息,参数2往哪里发,对方的地址
 7 
 8 from_server_msg,server_addr = udp_client.recvfrom(1024)
 9 
10 print(from_server_msg.decode('utf-8'))
11 udp_client.close()
View Code

五. 缓冲区

  

SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。

// 接收缓冲区
int nRecvBuf=32*1024; //设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

注意:当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客 户,O_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。

原文地址:https://www.cnblogs.com/Thui/p/10003412.html