菜鸟,写了一段网络通信java代码,运行总是出错,求大神帮忙

ririkka369 2017-06-27 03:51:03

服务器的代码:

public class Server2 {
public static void main(String[] args) throws IOException {


ServerSocket ss=new ServerSocket(5900);
System.out.println("server start, wait first client");
while(true){
Socket s=ss.accept();
System.out.println("server ready");
new ServerThread(s).start();
}
}
}

-------------------------------------------------------------------------
线程代码:

public class ServerThread extends Thread {
Socket s;

public ServerThread(Socket s){
this.s=s;
}
public void run(){
Scanner scan = null;
BufferedReader br=null;
PrintWriter pw=null;
String str=null;
try {

br=new BufferedReader(new InputStreamReader(s.getInputStream()));
pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
scan=new Scanner(System.in);
while(true){
str=br.readLine();
System.out.println("clent say: "+str);
System.out.println("server say: ");
str=scan.next();
pw.println(str);
pw.flush();
if(str.equals("exit")){
break;
}
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pw!=null){
pw.close();
}
if(s!=null){
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

scan.close();
}
}
}
------------------------------------------------------------------------------------------
客户端代码:

public class Client {
public static void main(String[] args) {
Socket s=null;
BufferedReader br=null;
PrintWriter pw=null;
String str=null;
Scanner scan=new Scanner(System.in);

try {
s=new Socket(InetAddress.getLocalHost().getHostAddress(),5900);
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

while(true){
System.out.println("client speak now: ");
str=scan.next();
pw.println(str);
pw.flush();
str=br.readLine();
System.out.println("receiver from server: "+str);
if(str.equals("exit")){
break;
}
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pw!=null){
pw.close();
}
if(s!=null){
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
scan.close();
}
}
}
----------------------------------------------------------------------
两个客户端进入后,一个退出,另一个不管再输入什么都报错。Exception in thread "main" java.lang.NullPointerException
at Client.main(Client.java:31)

求大神帮忙!!跪谢
...全文
175 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
云墨浅殇 2017-06-27
  • 打赏
  • 举报
回复
你可以在这个判断中,如果点击退出,跳出循环之前,关闭流试试
ririkka369 2017-06-27
  • 打赏
  • 举报
回复
感觉我这段代码有很大问题,但是我看不出来,请问如果要这么实现多客户端单服务器的话,应该怎么写比较好?
ririkka369 2017-06-27
  • 打赏
  • 举报
回复
第31行代码就是client的 if(str.equals("exit")){ break; } 请问该怎么加判断呀
云墨浅殇 2017-06-27
  • 打赏
  • 举报
回复
Exception in thread "main" java.lang.NullPointerException at Client.main(Client.java:31) 看看第31行代码,空指针异常,可以加个判空的判断

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧