2013-07-28 204 views
0

我想創建一個到Web服務器的套接字連接。接受客戶端請求與服務器套接字

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


public class Connection{ 
public final static int PORT = 1337; 

public Connection(){ 
    ServerSocket svrSocket = null; 
    try{ 
     svrSocket = new ServerSocket(PORT); 
     System.out.println("Conected to: " + PORT); 
     Socket con = null; 
     while(true) 
     { 
      try{ 
       con = svrSocket.accept();//on this part the program stops 
       System.out.println("Client request accepted"); 
       PrintWriter out = new PrintWriter(con.getOutputStream()); 

       out.flush(); 
      }catch(IOException ex) 
      { 
       ex.printStackTrace(); 

      } 
     } 
    }catch(IOException ex) 
    { 
     System.err.println(ex); 
     System.out.println("Unable to attach to port"); 
    } 


} 
} 

客戶端請求con = svrSocket.accept();不運行。我這樣說是因爲該行後面的消息沒有顯示。

它爲什麼不接受客戶端請求,是否可以使用Web瀏覽器測試服務器?請原諒我糟糕的編程風格。

謝謝。

+0

'svrSocket.accept()'是一個阻塞調用。建立到服務器的連接 – Reimeus

回答

1

您需要有一個客戶端連接到您的服務器,以便您的服務器能夠接受連接,直到出現這種情況代碼將在該線路上等待。

如果您運行代碼的實例,然後編譯並運行此代碼(同時您的代碼也在運行),則會發現獲得客戶端請求接受的消息,如果由於該端口而發生IOException,將其中兩個端口更改爲在cmd中調用netstat -o時不顯示的端口。

import java.io.*; 
import java.net.*; 
public class TestCon 
{ 
    public static void main(String[] args) 
    { 
     Socket echoSocket = null; 
     PrintWriter out = null; 
     BufferedReader in = null; 
     try { 
      echoSocket = new Socket("127.0.0.1", 1337); 
      out = new PrintWriter(echoSocket.getOutputStream(), true); 
      in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); 
      out.println("Hello Server!"); 
      System.out.println(in.readLine()); 
      out.close(); 
      in.close(); 
      echoSocket.close(); 
     } catch (UnknownHostException e) { 
      System.err.println("Host Unknown");System.exit(1); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for the connection.");System.exit(1); 
     } 
    } 
} 
+1

在'SERVER_URL'我可以使用任何URL? – Jonathan

+2

如果你在同一臺計算機上運行「localhost」或「127.0.0.1」,你應該使用你的服務器的URL。 – Robadob

+1

母雞我添加這個作爲一個程序,我使用端口80和我的網址爲127.0.0.1胸圍程序仍然停在同一個地方。如果我在這個小程序中使用端口1337,我會得到一個異常。 (注意!我寫了這個程序,並與我給的代碼實例化它在我的主) – Jonathan

0

客戶端請求CON = svrSocket.accept();不運行。

這不是客戶端連接請求代碼。這是服務器設置它自己監聽此端口並阻塞,直到收到一個傳入的連接。創建一個新的客戶端程序或啓動一個新的Thread是等待,直到服務器啓動,然後連接使用

Socket clientSocket = new Socket ("127.0.0.1", 1337); 
+0

當我運行這個時,我得到一個'IOException'因爲這個端口。當我使用端口80時,它會運行,但它與以前一樣在等待傳入連接。 – Jonathan

相關問題