| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 770 人关注过本帖
标题:怎么服务器端不能连续接收输入?
只看楼主 加入收藏
禹_二
Rank: 1
等 级:新手上路
帖 子:661
专家分:0
注 册:2006-9-13
收藏
 问题点数:0 回复次数:9 
怎么服务器端不能连续接收输入?

服务器只能接收到第一次发送的信息,
服务器的代码:
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 
2006-10-21 11:49
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
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还差不多

可惜不是你,陪我到最后
2006-10-21 13:03
禹_二
Rank: 1
等 级:新手上路
帖 子:661
专家分:0
注 册:2006-9-13
收藏
得分:0 

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

是咋回事呢?楼主!!!


2006-10-21 15:26
oujianqiang
Rank: 1
等 级:新手上路
帖 子:138
专家分:0
注 册:2006-5-16
收藏
得分:0 
这是客户端的问题,你看一下下面的语句
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();}
}
}
}
你每点一下就新建一个连接,而你的服务器又要重新启动一次开一个新的线程去处理了

2006-10-21 21:32
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
建议楼主还是先仔细看看简单的IO包和NET包先

可惜不是你,陪我到最后
2006-10-21 22:54
tblovecj
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2006-9-20
收藏
得分:0 
加上一个while(true){}
也就是一个死循环,让服务器一直在等待客户端连接和发送的信息
让客户端也一直等待服务器发送的信息,接收一样的道理

2006-10-22 02:14
禹_二
Rank: 1
等 级:新手上路
帖 子:661
专家分:0
注 册:2006-9-13
收藏
得分:0 
谢谢了 .

2006-10-22 08:22
禹_二
Rank: 1
等 级:新手上路
帖 子:661
专家分:0
注 册:2006-9-13
收藏
得分:0 

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


2006-10-22 08:23
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
以下是引用禹_二在2006-10-22 8:23:50的发言:

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

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


可惜不是你,陪我到最后
2006-10-22 09:15
禹_二
Rank: 1
等 级:新手上路
帖 子:661
专家分:0
注 册:2006-9-13
收藏
得分:0 

搞了一个简单的,看看有什么问题,(可以运行了,知识感觉有很多缺陷,大家指点指点!)
服务器端代码:
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();
}
}


2006-10-22 12:29
快速回复:怎么服务器端不能连续接收输入?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015785 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved