当前位置: 代码迷 >> Java相关 >> 怎么服务器端不能连续接收输入?
  详细解决方案

怎么服务器端不能连续接收输入?

热度:245   发布时间:2006-10-21 11:49:04.0
怎么服务器端不能连续接收输入?

服务器只能接收到第一次发送的信息,
服务器的代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Ser extends JFrame
{ private JTextArea ta;


public Ser()
{
Container c=getContentPane();
c.setLayout(null);
ta=new JTextArea(10,10);
ta.setBounds(10,10,370,250);
c.add(ta);


setSize(400,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void getMessage()
{
ServerThread cst=new ServerThread();
cst.start();
}
public static void main(String args[])
{
Ser s=new Ser();
s.getMessage();


}
class ServerThread extends Thread //接收信息的线程类
{
ServerSocket ss=null;
Socket s=null;
BufferedReader in=null;
PrintWriter out=null;
public ServerThread()
{
System.out.println("服务器已启动");

}
public void run()
{
try{
ss=new ServerSocket(8888);
s=ss.accept();
in=new BufferedReader (new InputStreamReader(s.getInputStream()) );
out=new PrintWriter (s.getOutputStream());
String str=in.readLine();
if(!str.equals("bye"))
{
ta.setText(str);
str=in.readLine();
}
}
catch(IOException ioe){ioe.printStackTrace();}
finally
{try{
out.close();
in.close();
s.close();
}
catch(IOException eee){eee.printStackTrace();}
}
}

}
}

客户端代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class Client extends JFrame implements ActionListener
{
private JButton b;
private JTextArea ta;

Socket s;
BufferedReader in;
PrintWriter out;

public Client()
{
Container c=getContentPane();//界面设置
c.setLayout(null);
b=new JButton("发送");
b.setBounds(150,300,100,30);
b.addActionListener(this);
c.add(b);

ta=new JTextArea(10,10);
ta.setBounds(10,10,370,250);
c.add(ta);
setSize(400,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent ee)//点击发送的消息响应
{
if(ee.getSource()==b)
{
try{
s=new Socket("localhost",8888);
in=new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintWriter(s.getOutputStream(),true);
out.print(ta.getText());
ta.setText("");
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{try{
out.close();
in.close();
s.close();
}
catch(IOException eee){eee.printStackTrace();}
}
}
}
public static void main(String args[])
{
Client cc=new Client();
}
}

搜索更多相关的解决方案: 服务器  import  java  awt  Ser  

----------------解决方案--------------------------------------------------------
public void run()
{
try{
ss=new ServerSocket(8888);
s=ss.accept();
in=new BufferedReader (new InputStreamReader(s.getInputStream()) );
out=new PrintWriter (s.getOutputStream());
String str=in.readLine();
if(!str.equals("bye"))
{
ta.setText(str);
str=in.readLine();
}
}
catch(IOException ioe){ioe.printStackTrace();}
finally
{try{
out.close();
in.close();
s.close();
}
catch(IOException eee){eee.printStackTrace();}
}
}

}
}
从你这个RUN方法就可以看出,它只能接收一次啊
你又没有写一个循环,你这个方法只能从头到尾执行一次而已
把if改为while还差不多

----------------解决方案--------------------------------------------------------

我把if改成while后服务器在接收输入的时候可以显示一次,紧接着出现一下错误.
Exception in thread "Thread-2" java.lang.NullPointerException
at Ser$ServerThread.run(Ser.java:55)

是咋回事呢?楼主!!!


----------------解决方案--------------------------------------------------------
这是客户端的问题,你看一下下面的语句
public void actionPerformed(ActionEvent ee)//点击发送的消息响应
{
if(ee.getSource()==b)
{
try{
s=new Socket("localhost",8888);
in=new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintWriter(s.getOutputStream(),true);
out.print(ta.getText());
ta.setText("");
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{try{
out.close();
in.close();
s.close();
}
catch(IOException eee){eee.printStackTrace();}
}
}
}
你每点一下就新建一个连接,而你的服务器又要重新启动一次开一个新的线程去处理了
----------------解决方案--------------------------------------------------------
建议楼主还是先仔细看看简单的IO包和NET包先
----------------解决方案--------------------------------------------------------
加上一个while(true){}
也就是一个死循环,让服务器一直在等待客户端连接和发送的信息
让客户端也一直等待服务器发送的信息,接收一样的道理
----------------解决方案--------------------------------------------------------
谢谢了 .
----------------解决方案--------------------------------------------------------

我怎么感觉java的这一部分这么复杂呢!!!!看完书老是忘!!


----------------解决方案--------------------------------------------------------
以下是引用禹_二在2006-10-22 8:23:50的发言:

我怎么感觉java的这一部分这么复杂呢!!!!看完书老是忘!!

多多练习,多多思考,从简单的写起,不要一开始就写多线程处理多连接的


----------------解决方案--------------------------------------------------------

搞了一个简单的,看看有什么问题,(可以运行了,知识感觉有很多缺陷,大家指点指点!)
服务器端代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

class ServerThread extends Thread //线程类
{
ServerSocket ss=null;
Socket s=null;
BufferedReader in=null;
PrintWriter out=null;
public ServerThread()
{
System.out.println("服务器已启动");

}
public void run()
{
try{
ss=new ServerSocket(8888);
while(true){s=ss.accept();
in=new BufferedReader (new InputStreamReader(s.getInputStream()) );
out=new PrintWriter (s.getOutputStream());
String str=in.readLine();
// while(!str.equals("bye"))
//{
System.out.println("客户信息:"+str);
//out.print("收到了");
//str=in.readLine();

//}
}
}
catch(IOException ioe){ioe.printStackTrace();}
finally
{try{
out.close();
in.close();
s.close();
}
catch(IOException eee){eee.printStackTrace();}
}
}
public static void main(String args[])
{
ServerThread st=new ServerThread();
st.start();
}

}

客户端代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class Client extends JFrame implements ActionListener
{
private JButton b;
private JTextArea ta;

Socket s;
BufferedReader in;
PrintWriter out;

public Client()
{
Container c=getContentPane();//界面设置
c.setLayout(null);
b=new JButton("发送");
b.setBounds(150,300,100,30);
b.addActionListener(this);
c.add(b);

ta=new JTextArea(10,10);
ta.setBounds(10,10,370,250);
c.add(ta);
setSize(400,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}
public void actionPerformed(ActionEvent ee)
{
if(ee.getSource()==b)
{
try{
s=new Socket("localhost",8888);
in=new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintWriter(s.getOutputStream(),true);

out.print(ta.getText());
//String getStr=in.readLine();
//ta.setText(getStr);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{try{
out.close();
in.close();
s.close();
}
catch(IOException eee){eee.printStackTrace();}
}


//ta.setText(getStr);
}
}
public static void main(String args[])
{
Client cc=new Client();
}
}


----------------解决方案--------------------------------------------------------
  相关解决方案