监控平台中需要无验证通过网络来传输数据,因此需要用到socket编程,重拾它!
概念:socket不是什么协议,而是对于网络层以及运输层的协议的抽象通信接口
socket的server端和client端语言无关,他们传输的只是数据
直接无节操上代码:
server端(python):
import socket
if __name__=='__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('172.16.9.158',10081))
sock.listen(5)
while True:
connection,address = sock.accept()
try:
connection.settimeout(5)
buf = connection.recv(1024)
if buf == '1':
print 'welcome to server!'
else:
print buf+' '+str(address)
except socket.timeout:
print 'connection receive fail'
connection.close();
client端(python):
import socket
import time
import thread
def timer(i, interval):
while True:
ts = 'thread: ' + str(i) +"-"+ str(interval)
print ts
time.sleep(interval)
def exam(times):
for i in range(times):
print i
thread.start_new_thread(timer, (i,(i*2 + 1)))
def connection(name):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr = ('172.16.9.158',10080)
print name
sock.connect(addr)
sock.send('i wanna see the true'+str(name))
sock.close()
def test(times):
for i in range(times):
thread.start_new_thread(connection, (i,))
if __name__=='__main__':
test(4)
time.sleep(20)
server端(php):
<?php
$tcp = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $tcp);
socket_bind($socket, '172.16.9.158', '10080');
socket_listen($socket, 4);
$buffer = "connect";
while(TRUE){
//接收一个请求
$connection = socket_accept($socket);
if(!$connection){
echo "connect fail\n";
}else{
echo "Socket connected!\n";
//向客户端发送数据
/*
if($buffer != ""){
echo "echo data to client\n";
socket_write($socket, $buffer."\n");
echo "Wrote to socket\n";
} else{
echo "no data in the buffer\n";
}
*/
//接收服务器端发送的数据,并返回状态信息
while($data = socket_read($connection, 1024, PHP_BINARY_READ)){
printf("Buffer: ".$data."\n");
socket_write($connection, "Information Received!");
}
}
socket_close($connection);
printf("Closed the socket\n");
}
?>
client端(python):
import socket
import time
import thread
def timer(i, interval):
while True:
ts = 'thread: ' + str(i) +"-"+ str(interval)
print ts
time.sleep(interval)
def exam(times):
for i in range(times):
print i
thread.start_new_thread(timer, (i,(i*2 + 1)))
def connection(name):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr = ('172.16.9.158',10080)
print name
sock.connect(addr)
sock.send('i wanna see the true'+str(name))
sock.close()
def test(times):
for i in range(times):
thread.start_new_thread(connection, (i,))
if __name__=='__main__':
test(4)
time.sleep(20)