java Socket编程中read方法的阻塞问题,求高手解答 代码如下

importjava.io.*;importjava.net.*;classClientDemo{publicstaticvoidmain(String[]args)th... import java.io.*;
import java.net.*;
class ClientDemo
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("127.0.0.1",10002);

DataOutputStream out =new DataOutputStream(s.getOutputStream());

out.write("TCP 来了".getBytes());

DataInputStream in = new DataInputStream(s.getInputStream());

byte[] buf = new byte[1024];

int len = in.read(buf);

String text = new String(buf,0,len);

System.out.println("server:"+text);

s.close();
}
}

class ServerDemo
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10002);

Socket s = ss.accept();//该方法是阻塞式的。

String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected");

DataInputStream in = new DataInputStream(s.getInputStream());

byte[] buf = new byte[1024];
int len = 0;
while(( len = in.read(buf))!=-1);
{
String text = new String(buf,0,len);

System.out.println(text);
}

DataOutputStream out =new DataOutputStream(s.getOutputStream());

out.write("已收到".getBytes());

s.close();
ss.close();
}
}
展开
 我来答
不一定是飞机
2012-04-26 · TA获得超过827个赞
知道小有建树答主
回答量:270
采纳率:100%
帮助的人:325万
展开全部
import java.io.*;
import java.net.*;

class ClientDemo {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 10002);

DataOutputStream out = new DataOutputStream(s.getOutputStream());

out.write("TCP 来了".getBytes());
out.flush();

DataInputStream in = new DataInputStream(s.getInputStream());

byte[] buf = new byte[1024];
int len = 0;
while (true) {
if ((len = in.read(buf)) != -1) {
String text = new String(buf, 0, len);
System.out.println("server:" + text);
break;
}
}

s.close();
}
}

class ServerDemo {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10002);

while (true) {
Socket s = ss.accept();// 该方法是阻塞式的。

String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + ".....connected");

DataInputStream in = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());

byte[] buf = new byte[1024];
int len = 0;

if ((len = in.read(buf)) != -1) {
String text = new String(buf, 0, len);
System.out.println(text);

out.write("已收到".getBytes());
out.flush();
}

}

}
}

给你改了下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我邹是想知道
2012-04-26 · TA获得超过772个赞
知道小有建树答主
回答量:784
采纳率:0%
帮助的人:518万
展开全部
你想问什么
更多追问追答
追问
开启服务端,运行客户端以后,程序阻塞了,不能往下进行了。
追答
while(( len = in.read(buf))!=-1);
注意后面一个分号。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式