最近做andorid网络通信这块,服务器端使用APPSERV配置,通过PHP设置了socket的端口号,实时读取来在socket另一端发送的数据。
对比前面开发使用httppost以及httpget方法,发现还是socket能够灵活一些,因为socket能够自己定制传输包的格式,同时socket速度是http方法不能比拟的。
andorid利用JSON编码后进行传递:
try
{
tcpSocket=new Socket("ip", port);
} catch (UnknownHostException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
try
{
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(tcpSocket.getOutputStream())),true);
JSONObject Object= new JSONObject();
JSONArray accxArray = new JSONArray();
JSONArray accyArray = new JSONArray();
JSONArray acczArray = new JSONArray();
for (int i = 0; i < 500; i++)
{
accxArray.put((int)(1000*accdataX.data[i]));
accyArray.put((int)(1000*accdataY.data[i]));
acczArray.put((int)(1000*accdataZ.data[i]));
}
//主要用于用户信息的发送
Object.put("id", elder.getid());
Object.put("name", elder.getname());
Object.put("bpm",60);
Object.put("accx", accxArray);
Object.put("accy", accyArray);
Object.put("accz", acczArray);
out.println(Object); //必须使用println进行发送
//接受服务器的信息
BufferedReader br=new BufferedReader(new InputStreamReader(tcpSocket.getInputStream()));
String mstr=br.readLine();
Log.i("socket11", mstr);
out.close();
br.close();
tcpSocket.close();
服务器PHP脚本语言: set_time_limit(0);
<?PHP
//设置IP和端口号
$address="223.3.61.67";
$port= 200; //调试的时候,可以多换端口来测试程序!
//创建一个SOCKET
if(($sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP))<0)
{
echo "socket_create() 失败的原因是:".socket_strerror($sock)."<br>";
}
//echo $sock;
//echo "hello wht";
//绑定到socket端口
if(($ret=socket_bind($sock,$address,$port))<0)
{
echo "socket_bind() 失败的原因是:".socket_strerror($ret)."<br>";
}
//开始监听
if(($ret=socket_listen($sock,4))<0)
{
echo "socket_listen() 失败的原因是:".socket_strerror($ret)."<br>";
}
do {
if (($msgsock = socket_accept($sock)) < 0)
{
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "/n";
echo "/nThe Server is Stop……/n";
break;
}
//读取数据操作
if(($buf=socket_read($msgsock, 10000, PHP_BINARY_READ))==false)
{
echo "错误(socket_read):";
break 2;
}
//发到客户端
$msg ="hello the world";
socket_write($msgsock, $msg, strlen($msg));
socket_close($msgsock);
$today=date("h:m:s");
$obj=json_decode($buf);
$id=$obj->id;
$name=(string)$obj->name; //此处name必须进行string强制类型转化
$ecgarray=$obj->ECG; //读取数据中ecgarray
$bpm=$obj->bpm;
$accxarray=$obj->accx;
$accyarray=$obj->accy;
$acczarray=$obj->accz;
print_r($accxarray);
print_r($accyarray);
print_r($acczarray);
?>
注意,在读取数据时,需要对json中string进行强制类型转化,否则将出现错误
最后希望对大家有帮助吧