Java:如何使用套接字发送和接收数据?

时间:2011-05-13 23:15:04

标签: java sockets network-programming

我正在构建一个中间件,我需要不断阅读设备中发生的事情,所以我构建了这个类:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 *
 * @author Valter
 */
public class Middleware {

    public static void main(String args[]) {
        try {
            // ip and port where is my device  
            Socket socket = new Socket("192.168.1.4", 2001);

            DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());

            DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());

            // i need send this parameter to my device 
            dataOutputStream.writeUTF("}Rv!");

            String answer = dataInputStream.readUTF();
            System.out.println("Answer:"+answer);

            dataInputStream.close();
            dataOutputStream.close();
            socket.close();

        } catch (UnknownHostException ex) {
            System.out.println("UNKNOW HOST EXCEPTION");
        } catch (IOException ex) {
            System.out.println(" IOEXCEPTION");
            System.out.println(ex.getMessage());
        }
    }
}

输出:

  

IOEXCEPTION连接重置

我班上有什么问题?

2 个答案:

答案 0 :(得分:1)

我不知道这是否是导致您出现问题的原因,但在尝试从输入流中读取响应之前,您并未刷新输出流。尝试:

dataOutputStream.writeUTF("}Rv!");
dataOutputStream.flush();

答案 1 :(得分:0)

您的设备是否真的理解writeUTF()的输出?并为readUTF()生成正确的输入?检查Javadoc。我认为不太可能。

'连接重置'通常意味着您已写入已被另一端关闭的连接,这已经是应用程序协议错误,并且可能表示先前的应用程序协议错误。