2014-02-22 78 views
-1

我有問題。 我不完全理解客戶端和服務器套接字是如何工作的? 我明白的是 當一個服務器套接字被創建時,它有很多可以打開的端口.socket對象是在連接到服務器套接字的不同端口的服務器端創建的。連接到服務器套接字的套接字連接到客戶端套接字並完成連接?瞭解客戶端和服務器插座

我是對還是錯?

public class TryThreads extends Thread 
    { 
    private int Portnumber; 
    private static String inputLine; 
    public TryThreads(int portNumber) 

    { 
     Portnumber = portNumber; 
     setDaemon(false); 
    } 

    public static void main(String[] args) 
    { 
     //create three threads 
     Thread first = new TryThreads(63400); 
     Thread second = new TryThreads(63401); 
     first.start(); 
     second.start(); 
     //third.start(); 
     System.out.println("ending main");  
     return;  
    } 

    public void run() 
    { 
     //System.out.println("one socket port opened"); 
     try 
     { 
      System.out.println("one socket port opened"); 
      ServerSocket serverSocket = new ServerSocket(Portnumber); 
      System.out.println("one socket port opened"); 
      while (true) 
      { 
       System.out.println("ending main2"); 
      //System.out.println("one socket port opened"); 
      Socket clientSocket = serverSocket.accept(); 
      BufferedReader bufferedReader = new BufferedReader(new 
InputStreamReader(clientSocket.getInputStream())); 
      while((inputLine = bufferedReader.readLine()) != null) 
       System.out.println(inputLine);    
      }   
     } 
     catch(IOException e) 
     {   
      System.out.println(e); 
     } 
    } 
    } 

和客戶端

public class client  
{ 
private static PrintWriter printWriter; 

public static void main(String[] args) 
{ 
    BufferedReader in = null; 
    try 
    { 
     Socket socket = new Socket("localhost",63400); 
     printWriter = new PrintWriter(socket.getOutputStream(),true);  
     printWriter.println("Hello Socket"); 
     printWriter.println("EYYYYYAAAAAAAA!!!!"); 
     socket.close(); 
    } 
    catch(Exception e) 
    { 
    System.out.println(e); 
    }  
} 
} 
+0

您可以簡單閱讀本文並查看您的代碼。 http://www.javaworld.com/article/2077322/core-java/sockets-programming-in-java-a-tutorial.html或者http://www.codeproject。com/Articles/24600 /使用-Java-Server中的套接字 學習某件事的最好方法是由你做到這一點,然後你會記得更多。 – RMachnik

+0

http://www.docjar.com/html/api/java/net/Socket.java.html或http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6 -b14/java/net/Socket.java – RMachnik

+0

我想查看類Socket和Server套接字的方法定義,是否有可能? – user3085866

回答

0
您提供的ServerSocket

端口號是而端口號,您在客戶端代碼中指定的傳入請求服務器套接字的監聽端口是服務器端的監聽端口您的客戶端去連接。

請檢查其他服務器端插座示例,包括這一個。 http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

檢查服務器套接字的accept()如何工作以及它的返回值是什麼。

因此,基本上, 服務器端套接字已創建並綁定到特定的端口用於傳入請求偵聽。 客戶端連接到服務器套接字的偵聽端口。 (綁定到客戶端是沒有必要的,它是隨機選擇的) ServerSocket創建連接到客戶端的Socket實例。 您可能希望給這個服務器端套接字來分開線程(或工作人員或其他),因爲您希望ServerSocket保持監聽傳入的連接。

+0

偵聽端口和客戶端試圖連接的端口是一樣的。 – EJP

+0

@EJP我說它有什麼不同嗎?請再讀一遍我的回覆 – wonhee

+0

是的,你做到了。讀你的第一句話。 '而'是沒有意義的。 – EJP

-1

服務器插座上的特定端口EX聆聽80 當服務器接受連接將創建一個特定端口的接受插槽,可以直接與客戶端的連接

+0

使用*相同*端口,而不是'特定端口'。 – EJP

0

我不解的是,當一臺服務器套接字被創建,它有許多可以打開的端口。

No.一端口。

套接字對象是在服務器端創建的,它連接到服務器套接字的不同端口。

No.一端口。

連接到服務器套接字的套接字連接到客戶端套接字並完成連接?

客戶連接到服務器,而不是一個套接字但端口。客戶端的連接結束由套接字表示。服務器端代表另一個套接字。