Python网络编程_TCP(简略版)
Posted 好好学习,天天向上
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python网络编程_TCP(简略版)相关的知识,希望对你有一定的参考价值。
TCP监听套接字:
当新的客户端请求连接时,服务器端监听套接字收到消息,会分配一个新的套接字对应于客户端(新socket包括四部分:源IP、源端口号、目的IP、目的端口号)用于接收客户端的消息,仔细观察可以看出对于不同的客户端每个新产生的套接字的源IP和源端口号都是一样的,目的IP和目的端口号则不同,说明四元组只要其中一个不相同,这个socket就是不一样的.
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 #监听套接字:负责等待新的各个客户端进行连接 17 socket_tcp_server.listen(128) 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 #accept返回的新socket包括四部分:源IP、源端口号、目的IP、目的端口号,这个四元组确定一个套接字 27 #仔细观察可以发现对应于每个客户端的新分配的socket的源IP和源端口号是一样的,目的IP和目的端口号是不一样的 28 #四元组一个不一样,就是一个不同的socket 29 #具体见 https://blog.csdn.net/woxiaohahaa/article/details/78038442 30 print(\'新分配的套接字: \',new_cilent_socket) 31 print(\'一个新的客户端已经到来%s\'%str(cilent_addr)) 32 while True: #循坏多次,为同一个客户端服务多次 33 #使用新分配的套接字,接收客户端发送过来的请求 34 #如果recv阻塞,两种方式解阻塞: 35 #1.客户端发送过来数据 36 #2.客户端调用close导致 37 try: 38 recv_data=new_cilent_socket.recv(1024) #接收到普通数据 39 except: 40 break 41 print(\'客户端发送过来的请求是:%s\'%recv_data.decode(\'utf-8\')) 42 #如果客户机不需要服务了,当客户端socket.close()执行时,服务器套接字的消息会为空(recv解阻塞) 43 #回送部分数据给客户端 44 new_cilent_socket.send(\'-------ok-------\'.encode(\'utf-8\')) 45 #关闭套接字 46 new_cilent_socket.close() 47 print(\'%d号客户机已经服务完毕!\'%num) 48 num+=1 49 #关闭套接字 50 socket_tcp_server.close() 51 52 if __name__==\'__main__\': 53 server()
以上是关于Python网络编程_TCP(简略版)的主要内容,如果未能解决你的问题,请参考以下文章
论文笔记Text-Recognition_简略版_201606