簡體   English   中英

ServerSocket.accept()中的應用程序塊

[英]Application blocks in ServerSocket.accept()

我正在嘗試在Java8中實現一個簡單的客戶端/服務器應用程序。 我正在使用此代碼:

`package prova;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;



public class Main {
    public static void main(String args[]){
        ServerSocket ssock;
        try {
            System.out.println("Listening");
            ssock = new ServerSocket(8080);
            while(true){
                Socket sock;
                try {
                    sock = ssock.accept();
                    System.out.println("Connected");
                    new Thread(new Server(sock)).start();
                }catch(IOException e1){e1.printStackTrace();}
            }
        }catch(IOException e2){e2.printStackTrace();}
    }
}`

服務器.java

package prova;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;

public class Server implements Runnable{

    Socket clientSocket;

    public Server(Socket cSocket){
        this.clientSocket = cSocket;
    }

    public void run(){
         try {
             PrintStream pstream = new PrintStream
             (clientSocket.getOutputStream());
             for (int i = 100; i >= 0; i--) {
                pstream.println(i + 
                " bottles of beer on the wall");
             }
             pstream.close();
             clientSocket.close();
          }
          catch (IOException e) {
             System.out.println(e);
          }
    }

}

當應用程序到達執行指令ssock.accept();時。 應用程序崩潰。 我真的不知道這段代碼有什么問題。 我在互聯網上進行搜索,但是除了類服務器之外,我的代碼與我發現的許多解決方案/示例之間沒有區別。 順便說一下,由於應用程序尚未到達執行線程的位置,我想這與我的問題無關,也許我錯了。 謝謝大家

這是一個奇怪的事實,它不提供任何堆棧跟蹤。 我在帶有eclipse mars 4.5.2的win10上運行此代碼。 代碼在此指令處停止sock = ssock.accept();

是的,它應該就此停止-它正在等待客戶端程序連接到同一套接字(服務器套接字8080)上,這就是accept()所做的,但是您不會在任何地方這樣做。 修復很簡單-讓您的客戶端嘗試在服務器正在等待的同一套接字上進行連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM