码迷,mamicode.com
首页 > 编程语言 > 详细

Python网络编程_TCP(简略版)

时间:2019-11-26 09:31:37      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:alt   nbsp   方式   阻塞   部分   数据   %s   http   服务器   

 

技术图片

TCP监听套接字:

  当新的客户端请求连接时,服务器端监听套接字收到消息,会分配一个新的套接字对应于客户端,用于接收客户端的消息,

但是当服务器端要回传消息时,使用的仍是监听套接字

技术图片

 

 1 #tcp客户端
 2 import socket
 3 
 4 def cilent():
 5     #1.创建TCP套接字
 6     # socket.AF_INET:IPV4  socket.SOCK_STREAM:TCP
 7     socket_tcp_cilent=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 8     
 9     #客户端一般不绑定(bind)ip和port
10     #2.连接服务器
11     server_ip=192.168.1.103
12     server_port=5566
13     server_addr=(server_ip,server_port)
14     socket_tcp_cilent.connect(server_addr)
15     
16     while True:
17         #3.发送数据/接收数据
18         send_data=input("请输入要发送的数据: ")
19         if send_data==exit:
20             print("客户端关闭!")
21             break
22         socket_tcp_cilent.send(send_data.encode(utf-8)) 
23         recv_data,recv_ip_port=socket_tcp_cilent.recvfrom(1024)
24         print("服务器端回送的消息%s"%(recv_data.decode(gbk)))
25         
26     #4.关闭TCP连接
27     socket_tcp_cilent.close()
28     
29     
30 if __name__==__main__:
31     cilent()
 1 #TCP服务器端
 2 import socket
 3 
 4 def server():
 5     num=1
 6     #1.创建套接字
 7     socket_tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 8     
 9     #2.绑定本地信息 bind(ip,port)
10     server_ip=‘‘
11     server_port=5566
12     server_addr=(server_ip,server_port)
13     socket_tcp_server.bind(server_addr)
14     
15     #3.让默认的套接字由主动变为被动 listen
16     socket_tcp_server.listen(128)
17     #监听套接字:负责等待新的各个客户端进行连接
18     
19     #4.等待客户端的连接 accept
20     # 程序执行的到这里默认阻塞,当客户端连接服务端时,解阻塞
21     # accept 返回一个二元元组,第一个是新的套接字,第二个是客户端
22     # accept 负责产生新的套接字为客户端服务
23     while True:
24         print(等待一个新的客户端的到来...)
25         new_cilent_socket,cilent_addr=socket_tcp_server.accept() 
26         print(一个新的客户端已经到来%s%str(cilent_addr))
27         while True: #循坏多次,为同一个客户端服务多次
28              #使用新分配的套接字,接收客户端发送过来的请求
29              #如果recv阻塞,两种方式解阻塞:
30              #1.客户端发送过来数据
31              #2.客户端调用close导致
32              try:
33                  recv_data=new_cilent_socket.recv(1024) #接收到普通数据
34              except:
35                  break
36              #print(new_cilent_socket)
37              print(客户端发送过来的请求是:%s%recv_data.decode(utf-8))
38              #如果客户机不需要服务了,当客户端socket.close()执行时,服务器套接字的消息会为空(recv解阻塞)
39              #回送部分数据给客户端
40              new_cilent_socket.send(-------ok-------.encode(utf-8))
41         #关闭套接字
42         new_cilent_socket.close()
43         print(%d号客户机已经服务完毕!%num)
44         num+=1
45     #关闭套接字 
46     socket_tcp_server.close()
47 
48 if __name__==__main__:
49     server()

 

 

Python网络编程_TCP(简略版)

标签:alt   nbsp   方式   阻塞   部分   数据   %s   http   服务器   

原文地址:https://www.cnblogs.com/NiBosS/p/11933145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!