回答我,立即给分!!!!!!!!!!!!!!!(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端口,就是说当你启动服务端的时候,同时要启动另外一个线程来监听端口,否则会发生阻塞!