今天不算忙,难得有时间闲下来了解一下socket的通信机制原理,顺便写一个简单的案例,以方便后期学习,积累。
一、服务端绑定一个端口号、并处于监听状态。用accept()接收发来的数据请求:
二、客户端通过地址和端口号连接服务端,并发送数据请求。
三、服务端收到后,处理请求,并发请求发给客户端。如何客户端还在连接请求,那么就循环操作。
四、客户端处理完数据之后,发送关闭请求,服务端收到请求后也开始关闭连接。
以上简介来自51cto博友分享
服务端代码
server_m.py
#!/usr/bin/env python
#-*-coding:utf-8-*-
import SocketServer
class myMonitorHandler(SocketServer.BaseRequestHandler):
def handle(self):
recv_data = self.request.recv(1024) ##定义接收到的数据大小
print "From 客户端 %s : %s" % (self.client_address,recv_data)
if __name__ == "__main__":
host,port = '',5000 #接收来自任意客户端IP,指定port为5000的数据
server = SocketServer.ThreadingTCPServer((host,port),myMonitorHandler)
server.serve_forever()
~
客户端代码
client_m.py
import socket
name = socket.gethostname() #随意定义,这里为获取本机主机名
host, port = "192.168.101.52",5000 #指定server ip和port 推送数据
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #指定传输的数据类型和结构。
s.connect((host,port)) #链接以上指定的主机端口
s.sendall(name) #将获取到的变量name值传送到服务端
s.close() #关闭请求链接
~
测试:
先启动服务器端#python m_server.py
后启动客户端#python m_client.py
备注:如果先启动客户端,客户端链接不到服务端会抛出异常
socket.error: [Errno 111] Connection refused
test result:
可以任意将变量name作为一个变量参数传入 比如命令 df -h free -m 等等
转载于:https://blog.51cto.com/soul455879510/1854555