readLine()取不出数据的问题 客户端的端口要和服务器的端口一样才行的要不你把br.readline()打印出来吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 st = new Thread(g); --> GetMessage gm = new GetMessage (); 客户端的端口要和服务器的端口一样才行的?还有这回事?不太可能吧。 再说了,br.readline()都已经等待了,没法打印。 SocketInputStream的read方法是阻塞等待的操作,如果没有可接收数据,就会一直等待。同时OutputStream的实例往往需要调用flush才能真正执行写操作。如果是这个原因,在发送端加个flush试试。BufferedReader中存在缓存,采用br.readLine()是按单位接收,回车换行为终结或则是流结束。建议如果发送端不是按指令行发送,就别用这种东西。 GetMessage是继承的Thread类,直接创建线程对象。你那种创建线程的方法是GetMessage实现Runnable接口的情况。 把null改成-1试试if((line = br.readLine())!=-1) readLine 方法是阻塞的方法你不输入信息它就停在这里 不继续执行所以一般有阻塞的时候要用到多线程。这样你就既可以 获取readLine方法的信息又不影响你的主函数运行所以你现在要引入线程咯 。。 发送端每发一段字节之后,要加个flush,才能把发送端的缓冲区内容发出到客户端缓冲区。 确定是在if((line = br.readLine())!= null)这里停止程序运行的吗 想个办法测试一下 在sleep()之前打印些测试的东西试试! 按你的说法,java的客户端还必须连java的服务器啦。要是别的没有flush怎么办? readline是一个阻塞模式啊,要碰到回车才会继续执行 GetMessage g = new GetMessage();// st = new Thread(g); --------这个是Runnable接口的启动方法把st.start(); class GetMessage extends Thread{ public void run(){ 问题的原因应该是对方发送的字符中并不包含回车,所以readLine()会一直阻塞你应该让对方发送回车 用字节比较好SOCKET接口走的是CLI。谁知道哪里是行啊。readline读文件还可以.读SOCKET不好吧.。所以用字符串读取不是好的IDEA中字节流吧。。我们项目中的一段代码。。private Socket myClientSocket; private PrintWriter myWriter; private BufferedReader myReader; private String myRemoteAddress;String command; char[] resp; int read = 0; timeoutTask = new TimeOutTask(this); mySessionMgr.startTimeoutTask(this); while( !isStopping ) { resp = new char[4000]; try { read = myReader.read(resp); if (read == -1) //if remote socket is closed { logger.info("Remote Disconnected: " + myRemotePort + "@" + myRemoteAddress); isStopping = true; myWriter.close(); myReader.close(); myClientSocket.close(); myWriter = null; myReader = null; myClientSocket = null; continue; } command = new String(resp,0,read); timeoutTask.cancel(); myProcessor.processCLIMsg(command, this);// timeoutTask = new TimeOutTask(this); mySessionMgr.startTimeoutTask(this); // myClientSocket.close();以上信息.FRI Streams are a fairly simple data structure; they are best thought of as linear sequences of bytes. 这个问题已经解决了,但收到的东西有点不对。呵呵。 先结贴。谢谢大家。gannian的东西不错。为什么每次发送后需要flush(),这个有点不明白。而且还需要有结束符。 你感觉你是个JAVA高手吗,那么就来挑战一下吧,下面可是ACM一道很经典的题目,试一吧 java调用MsSQL存储过程的问题 理行承诺,请hui_feng(盘桃2)来接分。 在JScrollPane中放一个JTextArea,怎样使JTextArea随着文字的输入往下滑。用什么函数? 问网络通信方面高手 在java里面怎样把一个文件夹的文件名称列出来啊 关于嵌套method的存取权限的问题,在线等待! 关于java plug-in... Python3编码问题 求解 如何用java备份mysql数据库?大家帮帮我! 静态方法在继承中的情况!
客户端的端口要和服务器的端口一样才行的?
还有这回事?不太可能吧。 再说了,br.readline()都已经等待了,没法打印。
BufferedReader中存在缓存,采用br.readLine()是按单位接收,回车换行为终结或则是流结束。建议如果发送端不是按指令行发送,就别用这种东西。
你那种创建线程的方法是GetMessage实现Runnable接口的情况。
if((line = br.readLine())!=-1)
你不输入信息它就停在这里 不继续执行
所以一般有阻塞的时候要用到多线程。
这样你就既可以 获取readLine方法的信息
又不影响你的主函数运行所以你现在要引入线程咯 。。
按你的说法,java的客户端还必须连java的服务器啦。要是别的没有flush怎么办?
st = new Thread(g); --------这个是Runnable接口的启动方法把
st.start();
class GetMessage extends Thread{
public void run(){
你应该让对方发送回车
private BufferedReader myReader; private String myRemoteAddress;String command; char[] resp;
int read = 0; timeoutTask = new TimeOutTask(this);
mySessionMgr.startTimeoutTask(this); while( !isStopping )
{
resp = new char[4000];
try
{
read = myReader.read(resp); if (read == -1) //if remote socket is closed
{
logger.info("Remote Disconnected: " + myRemotePort + "@" + myRemoteAddress);
isStopping = true; myWriter.close();
myReader.close();
myClientSocket.close(); myWriter = null;
myReader = null;
myClientSocket = null; continue;
} command = new String(resp,0,read);
timeoutTask.cancel();
myProcessor.processCLIMsg(command, this);
//
timeoutTask = new TimeOutTask(this);
mySessionMgr.startTimeoutTask(this);
// myClientSocket.close();以上信息.FRI