Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字在连接到服务器2期间发送一些数据_Java_Sockets - Fatal编程技术网

Java套接字在连接到服务器2期间发送一些数据

Java套接字在连接到服务器2期间发送一些数据,java,sockets,Java,Sockets,可能重复: 我有两个非常简单的java程序-客户端和服务器。它们通过套接字建立连接。 服务器从流中读取字符并将其打印到控制台 import java.net.*; import java.io.*; import java.util.Date; public class DataServerSIMS { static final int LISTENING_PORT = 2002; public static void main(String[] args) {

可能重复:

我有两个非常简单的java程序-客户端和服务器。它们通过套接字建立连接。 服务器从流中读取字符并将其打印到控制台

import java.net.*;
import java.io.*;
import java.util.Date;
public class DataServerSIMS {
    static final int LISTENING_PORT = 2002;
    public static void main(String[] args) {
        ServerSocket listener;  //Checks the connection requests
        Socket connection;      //To interact with other progs
        Reader incoming;            //Stream
        try {
            listener = new ServerSocket(LISTENING_PORT);
            TextIO.putln("Listening on port "+LISTENING_PORT);
            while (true) {
                connection = listener.accept();
                try {
                    incoming = new InputStreamReader(connection.getInputStream());
                    while (true) {
                        int ch = incoming.read();
                        if (ch == 1 || ch == '\r')
                            break;
                            System.out.print((char)ch);
                    }
                    System.out.println();
                    incoming.close();
                }
                catch (IOException e) {
                    TextIO.putln("Error: "+e);
                }//end try recieving data
            }//end while
        }
        catch (Exception e) {
            TextIO.putln("Sorry, the server has shut down.");
            TextIO.putln("Error: "+e);
            return;
        }
    }
}
客户端仅建立套接字连接

import java.net.*;
import java.io.*;
import java.util.Date;
public class TempClientSIMS {
    //static final int LISTENING_PORT = 32007;
    static final int LISTENING_PORT = 2002;
    public static void main(String[] args) {
        ServerSocket listener;  //Checsk the connection requests
        Socket connection;      //To interact with other progs
        Socket connectionToServer = null;   //Socket
        Reader incoming;            //Stream
        try {

            TextIO.putln("Localhost connects to:"+LISTENING_PORT);

            connectionToServer = new Socket ("localhost", 2002);

            TextIO.putln("Connected ");

            long i=0;
            while (i<2000000000) {
                i++;
            }


        }
        catch (Exception e) {
            TextIO.putln("Sorry, the server has shut down.");
            TextIO.putln("Error: "+e);
            return;
        }
    }


}
服务器打印:

Listening on port 2002
FdsfsdfsError: java.net.SocketException: Connection reset
很明显,为什么服务器控制台上会打印此字符串“
Error:java.net.SocketException:Connection reset
”。 但我不知道它是什么意思:“
Fdsfsdfs
”?
我是否可以阻止打印此字符串“
Fdsfsdfs
”?

从服务器上的流读取时,您没有检查EOS。如果读取的结果等于-1,则应该中断while循环

大概是这样的:

while (true) {
    int ch = incoming.read();
    if (ch == -1)
        break;

    }

    ...

还可以使用Thread.sleep()暂停执行。

在服务器上读取流时,您没有检查EOS。如果读取的结果等于-1,则应该中断while循环

大概是这样的:

while (true) {
    int ch = incoming.read();
    if (ch == -1)
        break;

    }

    ...

还可以使用Thread.sleep()暂停执行。

当套接字关闭时,ch将<0。您的代码无法处理此问题。

当套接字关闭时,ch将<0。您的代码无法处理该问题。

您不需要使用Reader检查流结束。将该检查添加到代码中


您不需要使用Reader检查流的结尾。将该检查添加到代码中


谢谢你的回答。这真的很有帮助!谢谢你的回答。这真的很有帮助!好啊非常感谢。这对我来说也很有趣:如果我以后想执行另一个I/O操作,我应该在执行I/O操作后关闭套接字吗?@Vladimir如果你得到<0,或者任何除SocketTimeoutException之外的IOException。如果我想执行两个conSequentive写入,该怎么办:OutputStream outToServerStream;outToServerStream=connectionToServer.getOutputStream();write(OutputArray);outToServerStream.flush();这是正常的做法吗?或者最好在第一次写入操作后关闭套接字连接,并为下一次写入操作建立新连接?好!非常感谢。这对我来说也很有趣:如果我以后想执行另一个I/O操作,我应该在执行I/O操作后关闭套接字吗?@Vladimir如果你得到<0,或者任何除SocketTimeoutException之外的IOException。如果我想执行两个conSequentive写入,该怎么办:OutputStream outToServerStream;outToServerStream=connectionToServer.getOutputStream();write(OutputArray);outToServerStream.flush();这是正常的做法吗?或者最好在第一次写入操作后关闭套接字连接,并为下一次写入操作建立新连接?
                 //Try this 
                 while (true) {
                    int ch = incoming.read();
                    if (ch == 1 || ch == '\r'||ch == -1)
                        break;
                        System.out.print((char)ch);
                      }