Python网络通信之socket模块(四)基于Tcp/Ip的TCP交互通信serve/client的编写过程
2016-08-23 01:37
736 查看
Server_v1:
缺陷是服务端只能接收一次请求就关闭链接了[root@ChangerLee 模拟Http服务器返回状态]# cat server_test_v1.py
!/bin/env python #import socket sk = socket.socket() ip_port = ('127.0.0.1',9999) sk.bind(ip_port) sk.listen(5) clisock,clieaddr = sk.accept() clisock.send('hello') clisock.close()
[root@ChangerLee 模拟Http服务器返回状态]# python server_test_v1.py & [1] 11057
[root@ChangerLee 模拟Http服务器返回状态]# netstat -antple|grep "9999" tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 0 88903 11057/python
Client_v1
[root@ChangerLee 模拟Http服务器返回状态]# cat client_test_v1.py
#!/bin/env python import socket clisock = socket.socket() ip_port = ('127.0.0.1',9999) clisock.connect(ip_port) data = clisock.recv(1024) print data
[root@ChangerLee 模拟Http服务器返回状态]# python client_test_v1.py hello
Server_v2:
多次建立TCP链接,进行通信[root@ChangerLee 模拟Http服务器返回状态]# cat server_test_v2.py
#!/bin/env python import socket sk = socket.socket() ip_port = ('127.0.0.1',9999) sk.bind(ip_port) sk.listen(5) while True: clisock,clieaddr = sk.accept() clisock.send('hello') clisock.close()
[root@ChangerLee 模拟Http服务器返回状态]# python server_test_v2.py
Client_v2
[root@ChangerLee 模拟Http服务器返回状态]# cat client_test_v2.py
#!/bin/env python import socket clisock = socket.socket() ip_port = ('127.0.0.1',9999) clisock.connect(ip_port) data = clisock.recv(1024) print data
[root@ChangerLee 模拟Http服务器返回状态]# python client_test_v2.py hello [root@ChangerLee 模拟Http服务器返回状态]# python client_test_v2.py hello [root@ChangerLee 模拟Http服务器返回状态]# python client_test_v2.py hello
Server_v3:
套接字属性查看[root@ChangerLee 模拟Http服务器返回状态]# cat server_test_v1.py
#!/bin/env python import socket sk = socket.socket() ip_port = ('127.0.0.1',9999) sk.bind(ip_port) sk.listen(5) while True: clisock,cliaddr = sk.accept() print (sk) print (clisock) print (cliaddr) clisock.send('hello') clisock.close()
[root@ChangerLee 模拟Http服务器返回状态]# python server_test_v3.py <socket._socketobject object at 0x7f7fe9c533d0> <socket._socketobject object at 0x7f7fe9c53440> ('127.0.0.1', 43454)
其时sk.accept()返回的是一个元组类型(<socket._socketobject object at 0x7f7fe9c53440> ,('127.0.0.1', 43454))
Server_v4:
该c/s对话通信:缺陷再与客户端不能直接退出[root@ChangerLee 模拟Http服务器返回状态]# cat server_test_v4.py
#!/bin/env python #coding=utf-8 import socket sk = socket.socket() ip_port = ('127.0.0.1',9999) sk.bind(ip_port) sk.listen(5) while True: clisock,cliaddr = sk.accept() clisock.send('hello') flag = True while flag: #不直接用break的原因是在多层循环的中break跳出循环会出现问题 data = clisock.recv(1024) #接收方法recv也是阻塞的 print ('from client:'+data) if data == 'exit': flag = False clisock.send('sb') clisock.close()
[root@ChangerLee 模拟Http服务器返回状态]# python server_test_v4.py from client:hello from client:exit 直接卡住。。。。。。
Client_v4
[root@ChangerLee 模拟Http服务器返回状态]# cat client_test_v4.py
#!/bin/env python import socket clisock = socket.socket() ip_port = ('127.0.0.1',9999) clisock.connect(ip_port) while True: data = clisock.recv(1024) inp = raw_input('client>') clisock.send(inp) print ('getinfo:',data)
[root@ChangerLee 模拟Http服务器返回状态]# python client_test_v4.py client>hello ('getinfo:', 'hello') client>exit ('getinfo:', 'sb') client>exit ('getinfo:', 'sb') client>exit Traceback (most recent call last): File "client_test_v2.py", line 11, in <module> clisock.send(inp) socket.error: [Errno 32] Broken pipe
socket.error: [Errno 32] Broken pipe往往是客户端异常断开造成的
Server_v5:
[root@ChangerLee 模拟Http服务器返回状态]# cat server_test_v5.py
#!/bin/env python #coding=utf-8 import socket sk = socket.socket() ip_port = ('127.0.0.1',9999) sk.bind(ip_port) sk.listen(5) while True: clisock,cliaddr = sk.accept() clisock.send('hello') flag = True while flag: data = clisock.recv(1024) print ('from client:'+data) if data == 'exit': flag = False clisock.send('sb') clisock.close()
[root@ChangerLee 模拟Http服务器返回状态]# python server_test_v5.py from client:hello from client:exit from client:come again from client:exit
Client_v5:
最终版本[root@ChangerLee 模拟Http服务器返回状态]# cat client_test_v5.py
#!/bin/env python import socket clisock = socket.socket() ip_port = ('127.0.0.1',9999) clisock.connect(ip_port) while True: data = clisock.recv(1024) inp = raw_input('client>') clisock.send(inp) print ('getinfo:',data)
if inp == 'exit':
break
[root@ChangerLee 模拟Http服务器返回状态]# python client_test_v5.py client>hello ('getinfo:', 'hello') client>exit ('getinfo:', 'sb') [root@ChangerLee 模拟Http服务器返回状态]# python client_test_v5.py client>come again ('getinfo:', 'hello') client>exit ('getinfo:', 'sb')
相关文章推荐
- socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信
- socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信
- Python网络通信之黏包问题(五)基于SocketServer模块和socket模块
- 基于TCP/IP的SOCKET接口实现网络通信
- socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信
- Python网络通信之socket模块(一)关于套接字
- 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
- C语言编写基于TCP和UDP协议的Socket通信程序示例
- Java 基于TCP/IP 实现简单的 socket 通信
- 从零开始写Go网络通信框架(1)——基本的Socket Client/Server的编写
- 超基础的网络编程02:基于TCP的Socket通信
- 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
- 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
- Java 基于 TCP/IP 实现 Socket中的多客户端通信
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
- 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
- java学习之路——基于TCP的Socket网络通信实例
- 基于TCP/IP的网络编程接口:Socket
- 基于linux简单的TCP/IP网络通信代码
- Python网络通信之socket模块(二)socket模块的方法与属性