首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java DataOutputStream异常

java DataOutputStream异常
EN

Stack Overflow用户
提问于 2010-06-30 16:55:42
回答 3查看 3.8K关注 0票数 1

第二次(在键入主机名之后)-服务器正常工作时,将在第24行抛出异常。代码

代码语言:javascript
复制
import java.io.*;
import java.net.*;

class TCPclient {
    public static void main(String[] args) throws Exception {
        String hostname, msg;
        InetAddress hostaddress;
        BufferedReader inFromUser = new BufferedReader (new InputStreamReader(System.in));
        System.out.println("Please type host\n");
        hostname = inFromUser.readLine();   //I type localhost
        hostaddress = InetAddress.getByName(hostname);
        Socket cSocket = new Socket(hostaddress, 44444);
        String cAddress = cSocket.getLocalSocketAddress().toString();
        DataOutputStream outToServer = new DataOutputStream (cSocket.getOutputStream());
        while (true)
        {
            msg = inFromUser.readLine();
            System.out.println(msg);
            if (msg.equals("exit"))
            {
                System.out.println("exit");
                break;
            }
            outToServer.writeBytes(cAddress + " said : " + msg + '\n'); //this line throws an exception the second time it runs
        }
        cSocket.close();
    }
}

我是新加入java的,所以我忽略了一些显而易见的东西。例外情况如下:

线程"main“中的java.net.SocketOutputStream.socketWrite0(Native异常:软件导致连接中止: java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:115) at java.io.DataOutputStream.writeBytes(DataOutputStream.java:259) at TCPclient.main(TCPClient.java:52)

服务器:

代码语言:javascript
复制
import java.io.*;
import java.net.*;

class TCPServer {
   public static void main(String argv[]) throws Exception {
      String clientSentence;
      ServerSocket welcomeSocket = new ServerSocket(44444);
      while(true) {
         Socket connectionSocket = welcomeSocket.accept();
         BufferedReader inFromClient = new BufferedReader(
                new InputStreamReader(connectionSocket.getInputStream( ) ) );
         clientSentence = inFromClient.readLine();
         System.out.println(clientSentence + "\n");
      }
   }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-30 17:34:04

您的客户端创建一个套接字,并一次又一次地写入该套接字。另一方面,您的服务器执行以下操作:

代码语言:javascript
复制
ServerSocket welcomeSocket = new ServerSocket(44444);
while(true) {
   Socket connectionSocket = welcomeSocket.accept();

它接受传入的连接,读取一行,然后放弃它(当垃圾收集时,我猜在套接字的finalize上,它关闭了连接)。然后它等待一个新的连接。

因此,要解决眼前的问题,请尝试移动。

代码语言:javascript
复制
    Socket connectionSocket = welcomeSocket.accept();
    BufferedReader inFromClient = new BufferedReader(
            new InputStreamReader(connectionSocket.getInputStream( ) ) );

在while循环之前。

票数 4
EN

Stack Overflow用户

发布于 2010-06-30 17:35:02

键入第二行要等多长时间?这可能与套接字闲置有关。

同样,使用这样的服务器代码,您将只看到第一条消息。试试这个:

代码语言:javascript
复制
import java.io.*;
import java.net.*;

class TCPServer {
    public static void main(String argv[]) throws Exception {
        String clientSentence;
        ServerSocket welcomeSocket = new ServerSocket(44444);
        Socket connectionSocket = welcomeSocket.accept();
        BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        while (true) {
            clientSentence = inFromClient.readLine();
            System.out.println(clientSentence + "\n");
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2010-06-30 19:20:56

尝试:

代码语言:javascript
复制
while (true)
{
    if(inFromUser.readLine() != null)
    {        
        msg = inFromUser.readLine();

        System.out.println(msg);
        if (msg.equals("exit"))
        {
           System.out.println("exit");
           break;
        }

        outToServer.writeBytes(cAddress + " said : " + msg + "\n");
    }
}

请注意以下更改:

代码语言:javascript
复制
if(inFromUser.readLine() != null)
{ 

代码语言:javascript
复制
... "\n"); 

代码语言:javascript
复制
... '\n');

试试看。这可能是一个过于简单的解决方案,但它确实是这样的:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3151527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档