没环境,不能帮你调试,
错误好像很明显,
客户端 建立连接后,就读
readline=sin.readLine();
服务端接受服务后也在读
String cmd = fromC.readLine();
应该是不行的。然后不明白你想干嘛顺手给你改一下吧。用的是notepad也没有环境,不能帮你调试错误。
import java.io.*;
import java.net.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
public class Server{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
BufferedReader fromC=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String cmd = fromC.readLine();
Runtime runtime = Runtime.getRuntime();
Process pro = runtime.exec(cmd);
InputStream its = pro.getInputStream();
BufferedReader sin=new BufferedReader(new InputStreamReader(its));
PrintWriter os=new PrintWriter(socket.getOutputStream());
//System.out.println("Client:"+fromC.readLine());
System.out.println("Client:"+cmd ); //你只是想要答应客户端命令而已,不要再读了
String line;
line=sin.readLine();
while(!line.equals("bye")){ //不明白,ping 命令不是以bye结束的,这里会死循环,你看着办吧
os.println(line);
os.flush();
System.out.println("Server:"+line);
//System.out.println("Client:"+fromC.readLine());
System.out.println("Client:"+cmd.readLine()); //你只是想要答应客户端命令而已,不要再读了
line=sin.readLine();
}
os.close();
fromC.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
--------------------------------------------------------------------------------
以上是服务器上的程序以下是服务器上的程序
--------------------------------------------------------------------------------
import java.net.*;
import java.io.*; public class Client{
public static void main(String args[]) {
try{
Socket socket=new Socket("193.9.200.2",4700);
OutputStream os = socket.getOutputStream();
os.write("ping 193.9.200.2 \n".getBytes());
os.flush();
os.close();
socket.close();
}catch(Exception e)
{e.printStackTrace();}
}
}
--------------------------------------------------------------------------------
同时测试时建议你关闭防火墙再看看,
错误好像很明显,
客户端 建立连接后,就读
readline=sin.readLine();
服务端接受服务后也在读
String cmd = fromC.readLine();
应该是不行的。然后不明白你想干嘛顺手给你改一下吧。用的是notepad也没有环境,不能帮你调试错误。
import java.io.*;
import java.net.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
public class Server{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
BufferedReader fromC=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String cmd = fromC.readLine();
Runtime runtime = Runtime.getRuntime();
Process pro = runtime.exec(cmd);
InputStream its = pro.getInputStream();
BufferedReader sin=new BufferedReader(new InputStreamReader(its));
PrintWriter os=new PrintWriter(socket.getOutputStream());
//System.out.println("Client:"+fromC.readLine());
System.out.println("Client:"+cmd ); //你只是想要答应客户端命令而已,不要再读了
String line;
line=sin.readLine();
while(!line.equals("bye")){ //不明白,ping 命令不是以bye结束的,这里会死循环,你看着办吧
os.println(line);
os.flush();
System.out.println("Server:"+line);
//System.out.println("Client:"+fromC.readLine());
System.out.println("Client:"+cmd.readLine()); //你只是想要答应客户端命令而已,不要再读了
line=sin.readLine();
}
os.close();
fromC.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
--------------------------------------------------------------------------------
以上是服务器上的程序以下是服务器上的程序
--------------------------------------------------------------------------------
import java.net.*;
import java.io.*; public class Client{
public static void main(String args[]) {
try{
Socket socket=new Socket("193.9.200.2",4700);
OutputStream os = socket.getOutputStream();
os.write("ping 193.9.200.2 \n".getBytes());
os.flush();
os.close();
socket.close();
}catch(Exception e)
{e.printStackTrace();}
}
}
--------------------------------------------------------------------------------
同时测试时建议你关闭防火墙再看看,
解决方案 »
- 表单页面的数据提交后是怎样写进数据库里的
- (紧急求助)找不到namespace和actin(很诡异)
- struts2 freemarker 生成的静态页面如何保持到项目中
- 乱码问题
- 新版163邮箱察看邮件时可以按照时间进行折叠,感觉很棒,请教各位高人有什么办法实现阿?
- 连接池问题,急!在线等!!!
- spring中如何对两个数据源同时进行事务管理
- 一个程序里做多个SOCKET连接,如果第一个连接不上,后面的就不进行了, 为什么?有经验的同仁来看!
- 求解:jbuilder+websphere编写j2ee时,当执行客户端时,服务器端是否会自动启动?(内祥)
- 真搞不懂出错在什么地方
- 在Struus框架下如何定义错误页面?
- 请问:支持jdk1.5的应用服务器有那些?
import java.io.*;
import java.net.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
import java.util.Date; public class Server{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket ssocket=null;
try{
ssocket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
BufferedReader fromC=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));
String cmd = fromC.readLine();
System.out.println("Client's command:"+cmd); Runtime runtime = Runtime.getRuntime();
Process pro = runtime.exec(cmd);
InputStream its = pro.getInputStream();
BufferedReader sin=new BufferedReader(new InputStreamReader(its));
PrintWriter os=new PrintWriter(ssocket.getOutputStream());
String line;
while(true){
while( (line = sin.readLine()) != null ){
os.println(line);
os.flush();
//System.out.println("Server:"+line);
line=sin.readLine();
}
break;
}
os.close();
fromC.close();
ssocket.close();
server.close();
}
catch(Exception e){System.out.println("Error:"+e);}
}
}
-------------------------------------------------------------------
import java.net.*;
import java.io.*; public class Client{
public static void main(String args[]) {
try{
Socket csocket=new Socket("193.9.200.2",4700);
OutputStream os = csocket.getOutputStream();
os.write("ping 193.9.200.10 \n".getBytes());
BufferedReader br=new BufferedReader(new InputStreamReader(csocket.getInputStream()));
String line;
while( (line = br.readLine()) != null ){
System.out.println("Clinet::"+line);
}
os.flush();
os.close();
csocket.close();
}
catch(Exception e){e.printStackTrace();}
}
}
----------------------------------------------------------
可以收到这样的效果:
客户端发出一条指令如PIGN 命令,由os.write("ping 193.9.200.2 \n".getBytes())
交给SERVER执行,执行的结果实时的发回给CLINET(命令产生的结果集)。
CLINET打印该结果。问题是,命令执行完成后,两端的通信就中断了
如何能保持SERVER端的监听,以便接收CLINET的下一条命令?
不过在做之前建议你不要用一大堆类带buffer之类的东西把自己绕晕了。
用OutputStream, InputStream就够了。基本如下。
S == 服务端
C == 客户端
Sos == 服务端socket的OutputStream.
Cos == 客户端socket的OutputStream.
Sis == 服务端socket的InputStream.
Cis == 客户端socket的InputStream.1. S listening
2. C connect
3. S accept 至此,连接建立成功。 分别用各自的 socket的 OutputStream, InputStream 进行数据交互
S accept之后,随即调用 Sis.read(); 进行数据读等待。(这是个阻塞的方法)
5. Cos.write("命令")
6. Sis接受到后 执行命令,并调用 Sos.write把 结果 写回去。
写完后,随即调用 Sis.read(); 进行数据读等待。
(保证服务端总是处于读状态)
7. Cis.read() 接受 结果数据,然后把结果数据显示出来。至此 一次数据交互已经完成。
8.如果需要再次交互 ,则调用Cos.write(“另外一个命令”)
重复 6-7 的 步骤即可。9.关于结束,一种方式是通过发送双方协定的特殊数据包,比如 C 发送"bye"给S,S接收到后就关闭服务。
另一种方式,把C端的连接关闭了,S端就会出异常了,不推荐。
import java.io.*; public class Client{
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new StringReader("ping"));
PrintWriter os=new PrintWriter(socket.getOutputStream());
String cmd;
String line;
cmd=sin.readLine();
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(!cmd.equals("end")){
os.println(cmd+"\n");
os.flush();
System.out.println("Client's command:: "+cmd);
while((line=is.readLine())!=null){
System.out.println(line);
}
}
os.close();
is.close();
socket.close();
}catch(Exception e) {
System.out.println("Error"+e);
}
}
}
----------------------------------------------import java.io.*;
import java.net.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
public class Server{
public static void main(String args[]){
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
BufferedReader fromC=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String cmd;
cmd = fromC.readLine();
Runtime runtime = Runtime.getRuntime();
Process pro = runtime.exec(cmd);
InputStream its = pro.getInputStream();
BufferedReader sin=new BufferedReader(new InputStreamReader(its));
PrintWriter os=new PrintWriter(socket.getOutputStream());
String line;
while(!cmd.equals("end")){
while((line=sin.readLine())!=null){
os.println(line);
os.flush();
}
cmd=fromC.readLine();
}
os.close();
fromC.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
import java.net.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
public class Server{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
BufferedReader fromC=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String cmd = fromC.readLine();
Runtime runtime = Runtime.getRuntime();
Process pro = runtime.exec(cmd);
InputStream its = pro.getInputStream();
BufferedReader sin=new BufferedReader(new InputStreamReader(its));
PrintWriter os=new PrintWriter(socket.getOutputStream());
//System.out.println("Client:"+fromC.readLine());
System.out.println("Client:"+cmd ); //你只是想要答应客户端命令而已,不要再读了
String line;
line=sin.readLine();
while(!line.equals("bye")){ //不明白,ping 命令不是以bye结束的,这里会死循环,你看着办吧
os.println(line);
os.flush();
System.out.println("Server:"+line);
//System.out.println("Client:"+fromC.readLine());
System.out.println("Client:"+cmd.readLine()); //你只是想要答应客户端命令而已,不要再读了
line=sin.readLine();
}
os.close();
fromC.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
--------------------------------------------------------------------------------
以上是服务器上的程序以下是服务器上的程序
--------------------------------------------------------------------------------
import java.net.*;
import java.io.*; public class Client{
public static void main(String args[]) {
try{
Socket socket=new Socket("193.9.200.2",4700);
OutputStream os = socket.getOutputStream();
os.write("ping 193.9.200.2 \n".getBytes());
os.flush();
os.close();
socket.close();
}catch(Exception e)
{e.printStackTrace();}
}
}