socket通信,三次握手,四次挥手

 

服务端套接字函数

  s.bind() 绑定(主机,端口号)到套接字
  s.listen() 开始TCP监听

    半连接池就是半连接存放位置

    可以设置最大半连接数来防止洪水攻击
  s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来

客户端套接字函数

  s.connect() 主动初始化TCP服务器连接
  s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

公共套接字函数

  s.recv() 接收TCP数据
  s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
  s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
  s.recvfrom() 接收UDP数据
  s.sendto() 发送UDP数据
  s.getpeername() 连接到当前套接字的远端的地址
  s.getsockname() 当前套接字的地址
  s.getsockopt() 返回指定套接字的参数
  s.setsockopt() 设置指定套接字的参数

  s.close() 关闭套接字

 1 #服务端
 2 import socket
 3 
 4 ip_port=('127.0.0.1',9000)      #电话卡
 5 BUFSIZE=1024                    #收发消息的尺寸
 6 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
 7 s.bind(ip_port) #手机插卡
 8 s.listen(5)     #手机待机
 9 
10 conn,addr=s.accept()            #手机接电话
11 # print(conn)
12 # print(addr)
13 print('接到来自%s的电话' %addr[0])
14 
15 msg=conn.recv(BUFSIZE)             #听消息,听话
16 print(msg,type(msg))
17 
18 conn.send(msg.upper())          #发消息,说话
19 
20 conn.close()                    #挂电话
21 
22 s.close()                       #手机关机
23 
24 #客户端        
25 import socket
26 ip_port=('127.0.0.1',9000)
27 BUFSIZE=1024
28 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
29 
30 s.connect_ex(ip_port)           #拨电话
31 
32 s.send('linhaifeng nb'.encode('utf-8'))         #发消息,说话(只能发送字节类型)
33 
34 feedback=s.recv(BUFSIZE)                           #收消息,听话
35 print(feedback.decode('utf-8'))
36 
37 s.close()                                       #挂电话
TCP通信模板(基础版)
 1 #服务端
 2 import socket
 3 ip_port=('127.0.0.1',8081)#电话卡
 4 BUFSIZE=1024
 5 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
 6 s.bind(ip_port) #手机插卡
 7 s.listen(5)     #手机待机
 8 
 9 while True:                         #新增接收链接循环,可以不停的接电话
10     conn,addr=s.accept()            #手机接电话
11     # print(conn)
12     # print(addr)
13     print('接到来自%s的电话' %addr[0])
14     while True:                         #新增通信循环,可以不断的通信,收发消息
15         msg=conn.recv(BUFSIZE)             #听消息,听话
16 
17         # if len(msg) == 0:break        #如果不加,那么正在链接的客户端突然断开,recv便不再阻塞,死循环发生
18 
19         print(msg,type(msg))
20 
21         conn.send(msg.upper())          #发消息,说话
22 
23     conn.close()                    #挂电话
24 
25 s.close()                       #手机关机
26 
27 #客户端
28 import socket
29 ip_port=('127.0.0.1',8081)
30 BUFSIZE=1024
31 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
32 
33 s.connect_ex(ip_port)           #拨电话
34 
35 while True:                             #新增通信循环,客户端可以不断发收消息
36     msg=input('>>: ').strip()
37     if len(msg) == 0:continue
38     s.send(msg.encode('utf-8'))         #发消息,说话(只能发送字节类型)
39 
40     feedback=s.recv(BUFSIZE)                           #收消息,听话
41     print(feedback.decode('utf-8'))
42 
43 s.close()                                       #挂电话
TCP通信模板(带循环)
 1 #服务端
 2 import socket
 3 ip_port=('127.0.0.1',9000)
 4 BUFSIZE=1024
 5 udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
 6 
 7 udp_server_client.bind(ip_port)
 8 
 9 while True:
10     msg,addr=udp_server_client.recvfrom(BUFSIZE)
11     print(msg,addr)
12 
13     udp_server_client.sendto(msg.upper(),addr)
14 
15 #客户端
16 
17 import socket
18 ip_port=('127.0.0.1',9000)
19 BUFSIZE=1024
20 udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
21 
22 while True:
23     msg=input('>>: ').strip()
24     if not msg:continue
25 
26     udp_server_client.sendto(msg.encode('utf-8'),ip_port)
27 
28     back_msg,addr=udp_server_client.recvfrom(BUFSIZE)
29     print(back_msg.decode('utf-8'),addr)
UDP通信模板)

三次握手与四次挥手

TCPsocket链接原理图

posted @ 2018-12-25 21:10  yyf1  阅读(537)  评论(0编辑  收藏  举报