先说一下我的问题:
一台本地机器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());
}
}
}
一台本地机器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());
}
}
}
解决方案 »
- 为什么我写了一个简单的socket服务端,一启动接收客户端就很占CPU了
- com.enterprisedt.net.ftp.FTPClient中restart
- java 图片32位真彩色,灰度级转化方法?
- 关于正则表达式的写法,那位能帮我看看!
- 怎样用正则表达式截取截取小数点前面的值。
- ----向jTextPane添加滚动条的问题------
- ★★★哪位兄弟知道如何装Together for Eclipse?
- Java中有没有“四舍五入”的运算方法?
- 有人知道KJAVA是什么意思吗?
- 正则表达式匹配
- 【ASK】200分,问几个比较深的问题。谢谢
- OutputStreamWriter的charsetName参数是什么?
或者没有把流flush出去终极办法 抓下包看下服务端有没有返回数据
服务器端利用类似fflush 强制刷新缓冲试试。
谢谢楼上的几位!
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