读书人

回答小弟我立即给分!(1)

发布时间: 2012-02-01 16:58:19 作者: rapoo

回答我,立即给分!!!!!!!!!!!!!!!(1)
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class Server extends JFrame
{
private JTextField field;
private JTextArea area;
private JScrollPane scrollPane;
private JButton button;
private ServerSocket server_1;
private Socket server_2;
private ObjectOutputStream out;
private ObjectInputStream in;



public Server()
{
super( "我的第一个聊天程序 ");
field = new JTextField(30);
area = new JTextArea(10,10);
scrollPane = new JScrollPane(area);
button = new JButton( "提交 ");
getContentPane().add(field,BorderLayout.NORTH);
getContentPane().add(scrollPane,BorderLayout.CENTER);
getContentPane().add(button,BorderLayout.SOUTH);



setSize(300,300);
setVisible(true);
connect();

}

public void connect()
{
try{
server_1 = new ServerSocket(4700);
area.append( "服务器启动,等待连接 ");
server_2 = server_1.accept();
area.append( "\n连接成功,可以进行通讯了 ");
out = new ObjectOutputStream(server_2.getOutputStream());
in = new ObjectInputStream(server_2.getInputStream());
out.flush();
Mread();
}catch(Exception e){}

}

public void Mread()


{
try{
String get = (String)in.readObject();
while(true)
{
get =(String) in.readObject();

displayMessage(get);
if(get.equals( "ByeBye "))
{
area.append( "\n通讯结束 ");
break;
}
out.flush();
}

close();}catch(Exception eee){}

}
private void displayMessage( final String messageToDisplay )
{

SwingUtilities.invokeLater(
new Runnable() { // inner class to ensure GUI updates properly

public void run() // updates displayArea
{
area.append( "\n"+messageToDisplay );
area.setCaretPosition(
area.getText().length() );
}

} // end inner class

); // end call to SwingUtilities.invokeLater
}

public void close()
{
try{
out.close();
in.close();
server_2.close();
server_1.close();}catch(Exception e){}
}

public static void main(String args[])


{
Server app = new Server();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}


}


为什么这个程序我用Client发一个你好,却陷入无穷循环,而下面的不会,因为帖子太长发不完),应该怎么解决,我知道是whie()那里的原因,可是下面(下一帖)的程序就能行,为什么呢?

[解决办法]
不是陷入无穷循环了,而是阻塞了:
String get = (String)in.readObject(); --> String get = null;
[解决办法]
请借助开发工具(Eclipse或JBuilder)进行单步调试,你就发现问题所在!除非你的编码能力很强,否则仅通过代码走查很难发现问题所在。
[解决办法]
Majia_(马甲先生) ( ) 信誉:100 Blog 加为好友 2007-05-27 20:57:06 得分: 0


不是陷入无穷循环了,而是阻塞了:
String get = (String)in.readObject(); --> String get = null;


-------------------------------------------------------
正解!!
[解决办法]
up
[解决办法]
如果在这里不能得到满意回答,请尝试到IT付费问答社区www.nlld.net提问
[解决办法]
waynehuge(跳舞吧,相爱吧,唱歌吧,工作吧,生活吧!!) ( ) 信誉:100 Blog 加为好友 2007-5-27 22:25:34 得分: 0



Majia_(马甲先生) ( ) 信誉:100 Blog 加为好友 2007-05-27 20:57:06 得分: 0


不是陷入无穷循环了,而是阻塞了:
String get = (String)in.readObject(); --> String get = null;


-------------------------------------------------------
正解!!


恩 通过
[解决办法]
:)

我也弄过一个,不过都不记得怎么解决了;诚如上面大人提到,直接DEBUG发现问题就OK了
[解决办法]
你应该另外启动一个线程,用来监听Socket端口,就是说当你启动服务端的时候,同时要启动另外一个线程来监听端口,否则会发生阻塞!

读书人网 >J2SE开发

热点推荐