黑马程序员技术交流社区
标题:
实现TCP数据传输
[打印本页]
作者:
庄承荣
时间:
2011-11-7 00:09
标题:
实现TCP数据传输
请大家帮忙看一下下面的程序哪里有问题,可以输出“debug 1 ...” ,但无法输出"debug 2 ..." , ip 地址没错
class TcpClient2{
public static void main(String[] args) throws Exception{
System.out.println("clint start...");
Socket s = new Socket("192.168.1.2",10005);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String sendDataStr=null;
while((sendDataStr=br.readLine())!=null){
if(sendDataStr.equals("bye")){
break;
}
bw.write(sendDataStr);
bw.flush();
}
bw.close();
}
}
class TcpServer2{
public static void main(String[] args) throws Exception{
System.out.println("server start...");
ServerSocket ss = new ServerSocket(10005);
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String receiveDataStr=null;
System.out.println("debug 1 ...");
while((receiveDataStr=br.readLine())!=null){
System.out.println("debug 2 ...");
if(receiveDataStr.equals("bye")){
break;
}
System.out.println("receive data:"+receiveDataStr);
}
s.close();
ss.close();
}
}
复制代码
作者:
柴亚飞
时间:
2011-11-7 03:36
当你启动服务端程序时,客户端没有数据传输。这时br.readLine()方法是读不到任何数据的。这时赋值语句receiveDataStr=br.readLine()的值依然是null。判断条件为false。这时程序不会进入循环体内部。所以服务端程序直接运行到最后,直接退出了。
你写的程序有问题。
作者:
周敏2011nc
时间:
2011-11-7 08:48
你在Server端使用的是读一行的方法,该方法必需读到“\r\n”的结束标记才会结束,TcpClient端的writer(String str)方法,并没有发送结束标记,所以Server端会一直等待在receiveDataStr=br.readLine()处。
解决办法 : 在TcpClient端的bw.write(sendDataStr) 后加bw.newLine()方法。
作者:
庄承荣
时间:
2011-11-7 21:19
谢谢各位了,问题已经解决{:soso_e100:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2