读书人

关于java写socket服务和c写的客户端的

发布时间: 2011-12-30 23:30:45 作者: rapoo

关于java写socket服务和c写的客户端的通信
最近由于一个项目的需要,客户端发送一个请求数据,服务端接受以后根据数据做出不同的回。我用java写了一个服务端,请求方为C语言写的,我的服务端程序启动以后,一直处在等待状态没有任何的反映:接受不到请求发来的数据,客户端也接受不到我的回应。而且不报任何异常,问题是,我用JAVA写了一个客户端测试代码却一切正常,麻烦大家谁给指点一二。谢谢,我写的服务器端代码和做测试用的客户端代码如下:

SERVER:
import java.net.*;
import java.io.*;
class testserver1 implements Runnable
{
Socket s;
public testserver1(Socket s)
{
this.s=s;
}
public void run(){
try{
InputStream ips=s.getInputStream();
OutputStream ops=s.getOutputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ips));
DataOutputStream dos=new DataOutputStream(ops);
PrintWriter out;
while(true){
System.out.println( "已进入循环!! ");
String strword=br.readLine();
//br.flush();
System.out.println(strword);
//if(strword.equalsIgnoreCase( "quit "))
// break;
//String strecho=(new StringBuffer(strword).reverse()).toString();
//////////////以下代码由于我怀疑是IO的原因,所以我用了各种输出形式结果失败
dos.writeBytes( "Init_ok1 "+ "\n ");//回应1
System.out.println( "已成功回应了1 ");
//dos.flush();
ops.write( "Init_ok2 ".getBytes());//回应2
ops.flush();
System.out.println( "已回应了2 ");
out = new PrintWriter(ops,true);
out.println( "Init_ok3 "+ "\n "); //回应3
System.out.println( "已回应了3 ");
out.flush();
out.close();
break;
//destroy();
//stop();
}
br.close();
dos.close();
s.close();
}
catch(NoRouteToHostException ex3) //无法到达远程主机,原因是防火墙干扰或者中间路由器停机。
{
try{
InputStream ips=s.getInputStream();
OutputStream ops=s.getOutputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ips));
DataOutputStream dos=new DataOutputStream(ops);
dos.writeBytes( "Init_Fail ");
}
catch(Exception xe){}
ex3.fillInStackTrace();


System.out.println( "failed ");

}
catch(SocketTimeoutException e2){ //处理超时异常

try{
InputStream ips=s.getInputStream();
OutputStream ops=s.getOutputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ips));
DataOutputStream dos=new DataOutputStream(ops);
dos.writeBytes( "Init_Fail---> out_times ");
}
catch(Exception xe){}
e2.fillInStackTrace();
System.out.println( "failed ");

}
catch(SocketException e1){ //处理底层协议异常
try{
InputStream ips=s.getInputStream();
OutputStream ops=s.getOutputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ips));
DataOutputStream dos=new DataOutputStream(ops);
dos.writeBytes( "Init_Fail--> xieyicuowu ");
}
catch(Exception xe){}
e1.fillInStackTrace();
System.out.println( "failed ");

}
catch(Exception e3){
try{
InputStream ips=s.getInputStream();
OutputStream ops=s.getOutputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ips));
DataOutputStream dos=new DataOutputStream(ops);
dos.writeBytes( "Init_Fail ");
}
catch(Exception xe){
xe.fillInStackTrace();}

e3.printStackTrace();
System.out.println( "failed ");

}
}
}
class testserver2{
public static void main(String arsgs[]){
try{
ServerSocket ss=new ServerSocket(20000);
while(true){
System.out.println( "Waiting for conncetion... ");
Socket s=ss.accept();


System.out.println( "已经接受到请求连接 ");
new Thread(new testserver1(s)).start();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

client:
import java.io.*;
import java.net.*;

public class testclient1
{
Socket socket;
BufferedReader in;
PrintWriter out;
public testclient1()
{
try
{
System.out.println( "Try to Connect to 127.0.0.1:20000 ");
socket = new Socket( "127.0.0.1 ",20000);
System.out.println( "The Server Connected! ");
System.out.println( "Please enter some Character: ");
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));


out = new PrintWriter(socket.getOutputStream(),true);
out.println(line.readLine());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.close();
in.close();
socket.close();
}catch(IOException e)
{
out.println( "Wrong ");
}
}
public static void main(String[] args)
{
new testclient1();
}
};

[解决办法]
这两种语言通信需要接口么
[解决办法]
你们监听的地址和端口是一样的吗?我以前编写这方面的程序都是没有问题。
[解决办法]
用你的client连C服务器
[解决办法]
1看是否能连上
2看连上后是否能接受数据。
能连上就会走accept(),然后再慢慢检查。
[解决办法]
收藏,谢谢!

读书人网 >Java Web开发

热点推荐