您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > PHP >

PHP 和 Servlet 通过Socket通信

来源:未知 责任编辑:责任编辑 发表时间:2014-05-26 10:59 点击:

 

本实验为了实现PHP 和Servlet 进行通信,费了不少周折。。。。。。。。而且网上现成的资料都不完整,怀着激动的心情将本实验遇到的错误和解决方法和大家分享:

PHP 作为Client端,Servlet 作为Server 端

在Server端,一般的做法是:

1. 写一个Servlet 类,并将该Servlet 设置为服务器启动时就加载的类。

 

 

 

 

<servlet> 

   <servlet-name>login</servlet-name> 

   <servlet-class>Servlet.LoginServlet</servlet-class> 

   <load-on-startup>0</load-on-startup> 

  </servlet> 

 

 

2. 如果单独在该Servelt的init()  方法中编写Server端代码,并进行监听

 

 

 while(true){ 

    socket = server.accept(); 

 

 

 

则会造成Tomcat 启动超时。

正确的做法应该是单独写一个  监听处理线程类SocketServer ,然后再init() 中,用多线程的方式来启动该线程:

 

 

public void init(ServletConfig config){ 

  new Thread(){ 

      public void run(){ 

      try{  

      ServerSocket server =new ServerSocket(4700);  

      Socket socket = null; 

      while(true){  

       socket=server.accept();  

       SocketServer sServer=new SocketServer(socket);  

       sServer.start(); 

      }  

      }catch(IOException e){  

      System.out.println(e.getMessage());} 

      } 

      }.start(); 

 } 

 

 

 

 

public class SocketServer extends Thread{ 

 private Socket socket; 

 public SocketServer(Socket socket){ 

  this.socket = socket; 

 } 

  

  

 public void run(){ 

  String output = ""; 

  try { 

   BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream())); 

   PrintWriter os=new PrintWriter(socket.getOutputStream()); 

   String line = null; 

   line = is.readLine(); 

   System.out.println(line); 

   output = "server send"; 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • PHP测试
  • 十天学会php之第六天
  • 几种显示数据的方法的比较
  • 使用xmlhttp为网站增加域名查询功能
  • PHP+MYSQL+Javascript数据库查询结果的动态显示
  • 查找数组中指定键名的值
  • 用redis实现跨服务器session
  • 用新浪微博接口发送图片微博失败的原因
  • smarty局部缓存技术[源码分析]
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1