网络编程 06.26

1.TCP协议的三次握手和四次挥手

三次握手建立连接

在连接之前客户端和服务端都是处于关闭状态的。

  1. 客户端会向服务端发起一个请求,会有一个SYN报头,
  2. 服务端接收到客户端的请求后,给出响应,并且把SYN报头改装好后又返回给客户端,会带有ACK报头,
  3. 客户端开始进入建立连接状态,再发一条请求,请求带上ACK给服务端,让服务端也进入连接状态

四次挥手关闭连接

  1. 客户端会发送请求带上FIN报头给服务端说我够了,要断开连接

  2. 服务端接收到客户端的请求后,返回一个带有ACK报头的请求说确认了

    FIN报头并没有返回

    服务端此时可能在传输数据

​ 3.服务端数据传输结束之后,服务端又会发送一次带有FIN的请求,告诉客 户端所有数据接收完毕,结束吧。

如果只有三次连接,客户端可能在第二次连接时死掉了,客户端压根没有收到没有收到第2,3次的数据传输,但是服务端是发送给你请求了

​ 4.客户端像服务器一样进行一次确认,我收到了你中途发的数据。

2.基于TCP协议的套接字编程

#服务端.py
import socket
import time
#1.符合TCP协议的手机
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print(server)
#2.绑定手机号
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server.bind(('127.0.0.1',8000))
server.listen(5)  #半连接池
#3.等待客户端连接
print('start...')
conn,client_addr = server.accept()
print(conn)
print(client_addr)
#4.收到消息
data = conn.recv(1024)
print(data)
#5.回消息
conn.send(data.upper())
#6挂断连接
time.sleep(500)
conn.close()
#7关机
server.close()

#客户端.py
import socket
import time
#1.创建符合TCP协议的手机
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.拨号
client.connect(('127.0.0.1',8000))
#3.收/发信息
client.send('hello',encode('utf8'))
data = client.recv(1024)
print(data)
#4.关闭
time.sleep(500)
client.close()
#服务端.py
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',8080))
server.listen(5)
print('start...')
while True:
    conn,client_addr = phone.accept()
    print('连接建立成功',client_addr)
    while True:
        try:
            data = conn.recv(1024)
            print(data)
            conn.send(data.upper())
        except ConnectionAbortedError:
            continue
        except ConnectionResetError:
            break
            
#客户端1.py
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1',8000))
while True:
    msg = input('please your msg')
    client.send(msg.encode('utf8'))
    data = client.recv(1024)
    print(data)
    
#客户端2.py
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1',8000))
while True:
    msg = input('please your msg')
    client.send(msg.encode('utf8'))
    data = client.recv(1024)
    print(data)
posted @ 2019-06-26 16:52  海森t  阅读(42)  评论(0)    收藏  举报