首页 > 作文

PHP 和 Servlet 通过Socket通信

更新时间:2023-04-07 05:52:50 阅读: 评论:0

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

php 作为client端,rvlet 作为rver 端

在rver端,一般的做法是:

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

<rvlet>

<rvlet-name>login</rvlet-name>

<rvlet-class>rvlet.loginrvlet</rvlet-class>

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

</rvlet>

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

while(true){

socket = rver.accept();

}

则会造成tomcat 启动超时。

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

public void init(rvletconfig config){

new thread(){

public void run(){

try{

rversocket rver =new rversocket(4700);

socket socket = null;

while(true){

socket=rver.accept();

socke乔迁之喜祝福语简单点trver srver=new socket煮板栗rver(socket);

srver.start();

}

}catch(ioexception e){

system.out.println(e.getmessage());}

}

}.start();

}

public class socketrver extends thread{

private socket socket;

public socketrver(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 = “rver nd”;

os.println(output);

os.flush();

is.clo();

o自考本科费用s.clo();

socket.clo();

} catch (ioexception e) {

// todo auto-generated catch block

e.printstacktrace();

}

}

}

曾经一度在client端,接收不到rver端发送过去的数据,认真检查了下代码,发现没有os.flush();

通过在init() 方法中,起一个新的线程,然后通过这个新的线程对每一个请求启动一个新线程来响应来自client 端的socket请求

在client端,采用php编写,

client端先发送数据给rver端,然后接收rver端的返回数据,进行显示

$urname = ‘veverrr’;

$passw单身网名ord = ‘swjtu’;

$write_str = ”;

if ($urname == null || $password == null){

// 跳转回登录

}

$socket_host =’localhost’;

$socket_port = 4700;

$socket = socket_create(af_inet, sock_stream, sol_tcp);

$connection = socket_connect($socket, $socket_host,$socket_port);

$write_str .= $urname.$password.chr(13) . chr(10);

if (!socket_write($socket, $write_str,strlen($write_str))){

echo “connect write”;

}

$return_str = socket_read($socket, 1024);

echo $return_str;

socket_clo($socket);

rver在使用is.readline() 时,就直接卡住了,后来在外文网站上找到了方法,一试验就通过了。

主要是在client端发送的数据后面加上 chr(13).chr(10) 表示先回车再换行,将其转换成java能够识别的格式。

php 和rvlet 通信的全部过程和注意点就那么多了。

摘自 veverrr的专栏

本文发布于:2023-04-07 05:52:49,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/0932acf7f941d9caf0aa8617a21f605b.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP 和 Servlet 通过Socket通信.doc

本文 PDF 下载地址:PHP 和 Servlet 通过Socket通信.pdf

下一篇:返回列表
标签:线程   数据   方法   做法
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图