标签归档:java

php与java通过socket通信demo

PHP通过socket与java进行通信与基本的sockent编程没什么区别,一个读,一个写,只是方便起见,用java写,PHP读。
demo实现的简单功能是,接受PHP端写入的字符串,然后原样返回给输出端。代码如下:

import java.io.*;
import java.net.*;

public class Server {
public static void main(String[] args) throws IOException{
  System.out.println("Server started !\n");
  ServerSocket server=new ServerSocket(5678);
  while (true){
                Socket client=server.accept();
                System.out.println("client coming!\n");
                PrintWriter printer = new PrintWriter(client.getOutputStream());
                BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                String  m = reader.readLine();
                System.out.println("get infomation " + m + "\n from " + client.getInetAddress().toString());
                printer.println(m);
                printer.flush();
                printer.close();
                printer.close();
                client.close();
                System.out.println("client leaving!\n");
              }
        }
} 

运行起来,以后该java程序将监听5678端口,当接收到消息以后,将接收的消息原样返回给客户端……
PHP的代码如下:

<?php
	$socket = socket_create ( AF_INET, SOCK_STREAM, SOL_TCP ) or die ( 'could not create socket' );
	$connect = socket_connect ( $socket, '127.0.0.1', 5678 );
	//向服务端发送数据
	socket_write ( $socket, 'Hello' . "\n" );
	//接受服务端返回数据
	$str = socket_read ( $socket, 1024, PHP_NORMAL_READ );
	
	echo $str;
	//关闭
	socket_close($socket);

PHP程序连接本机的5678端口,写入 Hello,然后读取返回的数据……将返回的数据,输出到浏览器……
先运行起java的服务端,然后用浏览器访问PHP页面,将看到从服务器端返回的Hello

android手机变身电脑遥控器—–shutdown your computer

这个想法,早就有了,想给电脑装个遥控器,但是一直没有试过。最近换了android的手机,支持wifi,然后就简单的实现了一个基础功能吧。也就是用手机关掉自己的笔记本。
使用范围:wifi范围内,遥控器装备(android系统,支持网络通信,支持wifi,支持internet),笔记本(安装jdk或者jre吧)

实现分两步,手机端和电脑端。实现思路如下:
笔记本上运行一个socket监听程序,来监听来自外部的连接,如果接受到连接,然后从连接流中读取一行,判断是否是shutdown,如果是,那么执行关机程序。
手机端分为两个部分,一个文本框EditText,一个button,当点击button的时候,读取文本框中的值作为IP,连接到该IP的指定端口,然后写入一行shutdonw。
反应开始,shutdown这一行字符通过局域网的路由器到达电脑端,电脑经过解析判断,然后执行关机程序。

实现的几段基本代码:

监听代码:

ServerSocket server;
try {
   server = new ServerSocket(9995);
   System.out.println("Server Started!");
   while(true){
	Socket client = server.accept();
	InputStream ins = client.getInputStream();
	BufferedReader br = new BufferedReader(new InputStreamReader(ins));
	String tmp = br.readLine();
	System.out.println("Message received!");
	if(tmp.equals("shutDown".toString())) {
	   System.out.println("Hello message!");
	   Main.shutDown();    
	 }
   }} catch (IOException e) {
// TODO Auto-generated catch block
	e.printStackTrace();
}

关机代码:
Main类的shutdown函数:

try {
   Runtime.getRuntime().exec("poweroff -f");
} catch (IOException e) {
// TODO Auto-generated catch block
  e.printStackTrace();
}

注:本段代码的关机命令,只适用于linux系统。关机命令欠妥,容易丢失数据,服务器还是不要这么做了。

andorid连接和发送代码:

try {
   Socket socket = new Socket(m, 9995);
   OutputStream os = socket.getOutputStream();
   PrintStream ps = new PrintStream(os);
   ps.println("shutDown");
   ps.flush();
   ps.close();
  os.close();
  socket.close();
  this.showError("Close successfully!");
} catch (UnknownHostException e) {
  // TODO Auto-generated catch block
  this.showError("当前主机不在线或者已经被你关掉了!");					 
} catch (IOException e) {
  // TODO Auto-generated catch block
  this.showError("当前主机不在线或者已经被你关掉了!");			
}

android需要以下的权限:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

设置开机启动java程序,然后ps -aux 可以看到如下两行

root      1809  0.0  0.0   2040   188 ?        S    Feb21   0:00 /bin/sh -e /etc/srcs.shell
root      1812  0.0  0.0 732708   684 ?        Sl   Feb21   0:35 java -jar /home/istrone/shutdown.jar

如何实现的开机启动就留给聪明一点儿的人去探索吧!

red5建立多个应用的方法

red5是一个开源的流媒体服务器,它是搭建一个在线广播的音乐网站或者视频网站的很不错的选择。将音频文件或者视频文件放到相应的目录中,就可以变成流播放了。如果你是java的痴迷者,那么他将是一个很不错的研究对象。如果你是一个flash开发的爱好者,那么他对于你而言将是一个很不错的选择,因为他可以替代adobe公司收费的fms,而且性能一点儿也不比他差。

作者下载的是源代码包,开发环境是ubuntu 11.04。当然之前需要安装java,作者的计算机已经安装好了。如果你的计算机上还没有java,那么就有点儿落后了。从sun官网上下载一个吧。可以下载bin包,然后sh download.bin。然后就可以安装了,然后在配置java环境就可以了。不过最推荐的还是ubuntu自带的openjdk因为基本不用你配置。

下载下来源代码包以后,cd到red5的目录,就可以看到red5.sh。将其设置为可以运行,然后sh red5.sh。然后通过127.0.0.1:5080在浏览器中访问就可以看到欢迎界面了。

自带的几个应用都是很不错的。oflaDemo就是一个在线播放视频流和音频流的应用。我们这篇文章的目地就是多建立几个oflaDemo。第一个比较简单,自己从界面中安装就可以了。通过rtmp://127.0.0.1/oflaDemo就可以播放你的流文件了。

建立第二个的方法如下,复制oflaDemo,到另一个目录,比如说testDemo。然后进入到web-inf下边更改web.xml中的节点

webAppRootKey /testDemo
另外更改red5-web.properties中的节点
webapp.contextPath=/testDemo
webapp.virtualHosts=*, localhost, localhost:8088, 127.0.0.1:8088

其余testDemo中的文件全部复制

黑体的是更改的部分。