今天写了一个简单的程序,本机和服务器通过Socket通讯,本机发送本机ip给服务器,然后服务器返回信息给本机,但是本机一直没有接收到,如果将服务器那边的程序关闭的话,这边就能收到了,真晕!不知道怎么回事。
感觉自己的代码应该没有问题,但是梁工说他那边应该也没有问题。后来发帖子请教了一下,说可能是VB那边没有添加换行符或者没有Flush之类的,然后让梁工那边的VB程序加上换行符,测试一下,呵呵,还真的收到了。
本机代码如下:
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;
while((line=br.readLine()) != null){
System.out.println("收到的信息是:"+line);
/**
* 下面开始根据红外编号进行相关的步骤,如果投影机正播放内容,当下一次红外再次触发时,会导致投影机重新播放,那么此时应该设置一个延时。
*/
}
//如果VB发送信息的那段代码没有添加换行符,那么这边仍然可以获得,如下方法
//byte[] buf = new byte[1024];
// is.read(buf);
// String msg = new String(buf, "gb2312");
br.close();
is.close();
bw.close();
os.close();
socket.close();
} catch (Exception e) {
System.out.println("main异常:"+e.getMessage());
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。