关于套接字,用Scanner 和 PrintWriter进行网络IO报错了

qq_36878670 2018-04-07 07:53:01
程序实现的功能是计算圆的面积,客户端发送半径给服务器,服务器把计算结果返回到客户端。题目要求用Scanner和PrinteWriter进行网络IO。报了以下错误,不知道要怎么改?下面贴出了全部代码,主要代码标红了
Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException





package com.hl.net.demo1;

import java.awt.BorderLayout;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Server extends JFrame{
private JTextArea jta = new JTextArea();

public static void main(String[] args){
new Server();
}

public Server(){
setLayout(new BorderLayout());
add(new JScrollPane(jta));

setTitle("Server");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

try{
ServerSocket serverSocket = new ServerSocket(8000);
jta.append("Server started..");
Socket socket = serverSocket.accept();

Scanner inputFromClient = new Scanner(socket.getInputStream());
PrintWriter outputToClient = new PrintWriter(socket.getOutputStream());

while(true){
Double radius = Double.parseDouble(inputFromClient.next());
Double area = radius * radius * Math.PI;
System.out.println("area: " + area);
outputToClient.write(area.toString());

jta.append("Radius received from client: " + radius + '\n');
jta.append("Area found: " + area + '\n');
}
}catch(IOException ex){
System.err.println(ex);
}
}
}




package com.hl.net.demo1;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Client extends JFrame{
private JTextField jtf = new JTextField();

private JTextArea jta = new JTextArea();

private PrintWriter toServer;
private Scanner fromServer;

public static void main(String[] args){
new Client();
}

public Client(){
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("Enter radius"), BorderLayout.WEST);
p.add(jtf, BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.RIGHT);

setLayout(new BorderLayout());
add(p, BorderLayout.NORTH);
add(new JScrollPane(jta), BorderLayout.CENTER);

jtf.addActionListener(new TextFieldListener());

setTitle("Client");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

try{
Socket socket = new Socket("localhost", 8000);

fromServer = new Scanner(socket.getInputStream());
toServer = new PrintWriter(socket.getOutputStream());

}catch(IOException ex){
jta.append(ex.toString() + '\n');
}
}

private class TextFieldListener implements ActionListener{

public void actionPerformed(ActionEvent e) {
Double radius = Double.parseDouble(jtf.getText().trim());

//try{
toServer.write(radius.toString());
toServer.flush();

Double area = Double.parseDouble(fromServer.next());

jta.append("Radius is " + radius + "\n");
jta.append("Area received from the server is "
+ area + '\n');
/*}catch(IOException ex){
System.err.println(ex);
}*/
}

}

}



...全文
321 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanhang926 2018-04-07
  • 打赏
  • 举报
回复
你应该吧全部异常栈贴出来

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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