首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Socket网络编程报错误

2012-06-23 
Socket网络编程报异常Client类Java codepackage ex30import java.io.*import java.net.*import java.aw

Socket网络编程报异常
Client类

Java code
package ex30;import java.io.*;import java.net.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Client extends JFrame{    // Text field for receiving radius    private JTextField jtf = new JTextField();        // Text area to display contents    private JTextArea jta = new JTextArea();        // IO streams    private DataOutputStream toServer;    private DataInputStream fromServer;        public static void main(String[] args) {        // TODO 自动生成方法存根        new Client();    }        public Client(){        // Panel p to hold the label and text field        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);  // It is necessary to show the frame here!                try{            // Create a socket to connect to the server            Socket socket = new Socket("localhost", 8000);            // Socket socket = new Socket("130.254.204.36", 8000);            // Socket socket = new Socket("drake.Armstrong.edu", 8000);                        // Create an input stream to receive data from the server            toServer =                new DataOutputStream(socket.getOutputStream());        }        catch(IOException ex){            jta.append(ex.toString() + '\n');        }    }        private class TextFieldListener implements ActionListener{        public void actionPerformed(ActionEvent e){            try{                // Get the radius from the text field                double radius = Double.parseDouble(jtf.getText().trim());                                // Send the radius to the server                toServer.writeDouble(radius);                toServer.flush();                                // Get area from the server                double area = fromServer.readDouble();  //这一行为什么会报异常,但程序还能运行                                // Display to the text area                jta.append("Radius is " + radius + "\n");                jta.append("Area received from the server is "                        + area + '\n');            }            catch(IOException ex){                System.err.println(ex);            }        }    }}

Server类
Java code
package ex30;import java.io.*;import java.net.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Client extends JFrame{    // Text field for receiving radius    private JTextField jtf = new JTextField();        // Text area to display contents    private JTextArea jta = new JTextArea();        // IO streams    private DataOutputStream toServer;    private DataInputStream fromServer;        public static void main(String[] args) {        // TODO 自动生成方法存根        new Client();    }        public Client(){        // Panel p to hold the label and text field        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);  // It is necessary to show the frame here!                try{            // Create a socket to connect to the server            Socket socket = new Socket("localhost", 8000);            // Socket socket = new Socket("130.254.204.36", 8000);            // Socket socket = new Socket("drake.Armstrong.edu", 8000);                        // Create an input stream to receive data from the server            toServer =                new DataOutputStream(socket.getOutputStream());        }        catch(IOException ex){            jta.append(ex.toString() + '\n');        }    }        private class TextFieldListener implements ActionListener{        public void actionPerformed(ActionEvent e){            try{                // Get the radius from the text field                double radius = Double.parseDouble(jtf.getText().trim());                                // Send the radius to the server                toServer.writeDouble(radius);                toServer.flush();                                // Get area from the server                double area = fromServer.readDouble();  //这一行为什么会报异常,但程序还能运行                                // Display to the text area                jta.append("Radius is " + radius + "\n");                jta.append("Area received from the server is "                        + area + '\n');            }            catch(IOException ex){                System.err.println(ex);            }        }    }} 


先运行,Server类,再运行client类,在Client中填入数字后,在Server类的第70行就报异常,
不知道为什么会这样,而且报异常后程序还能运行,就是一直报异常

[解决办法]
fromServer 未初始化
[解决办法]
在client个构造函数里面将fromServer初始化,即
Java code
 try{            // Create a socket to connect to the server            Socket socket = new Socket("localhost", 8000);            // Socket socket = new Socket("130.254.204.36", 8000);            // Socket socket = new Socket("drake.Armstrong.edu", 8000);                        // Create an input stream to receive data from the server            toServer =                new DataOutputStream(socket.getOutputStream());            fromServer = new DataInputStream(socket.getInputStream());        }        catch(IOException ex){            jta.append(ex.toString() + '\n');        } 

热点排行