先说一下我的问题:
一台本地机器Localhost、一台服务器Remote,2台机器通过Socket进行通讯。本机程序运行时,会将本机ip发送给远程主机,然后远程主机会返回信息给本地机器。问题就在这时出现了,本机ip发送给远程主机是成功的,但是接收不到服务器传来的信息,当关闭远程主机的程序时,本地机器就能接收到了,不知道为什么?请知道的指教一下。本机代码是用java写的,服务器那边是用VB写的。两者通过Socket通讯。
本机代码如下:public class PC {

public static void main(String[] args){
String remote = "192.168.1.5";
try {
//获得本机IP
InetAddress addr = InetAddress.getLocalHost();
String localhostIP = addr.getHostAddress(); Socket socket = new Socket(remote,1011);

//将本机IP发送给远程主机
OutputStream os = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(localhostIP);
bw.flush();


//接受主机发送的指令
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null;
if((line=br.readLine()) != null){
System.out.println("收到的信息是:"+line);
} br.close();
is.close();
bw.close();
os.close();
socket.close();
} catch (Exception e) {
System.out.println("main异常:"+e.getMessage());

}
}

解决方案 »

  1.   

    是否是因为VB服务端没有返回 回车或换行符
    或者没有把流flush出去终极办法 抓下包看下服务端有没有返回数据
      

  2.   

    估计是服务器那边的问题, 服务器把内容发到了缓冲中,而没有发到本地来。
    服务器端利用类似fflush 强制刷新缓冲试试。
      

  3.   

    看看是不是 要先判断下socket 当它不为空时再进行下面的操作
      

  4.   

    好了,原因查出来了,是因为VB那边没有添加换行符的原因。
    谢谢楼上的几位!
    PS:
    1:如果VB那边没有添加换行符,可以用如下方法解决:
    //可能需要少许的修改
    InputStream is = socket.getInputStream();
    byte[]   buf   =   new   byte[1024];   
    is.read(buf);   
    String   msg   =   new   String(buf,   "gb2312"); 
    System.out.println("msg = "+msg);
    2:VB中的换行符为:vbCrlf