我已經通過了我在Java書中找到的這個程序。但我有一個非常基本的問題,我無法在互聯網上找到任何具體的答案。服務器端程序連接詳細信息
我的代碼:
我減少了所有與我的問題有關的代碼。
import java.io.*;
import java.net.*;
public class DailyS {
String s="someString";
public void go{
try{
ServerSocket S=new ServerSocket(4242); while(true)
{
Socket sock=S.accept();
//other codes, irrelevant here
}
}
catch(IOException ex) {
ex.printStackTrace();
}
} public static void main(String[] arg){
DailyS server = new DailyS();
server.go() ;
}
}
我知道,ServerSocket
會收到一個客戶端,並指定他的其他一些隨機端口。
我的疑問:
當將這個程序開始運行,並在代碼什麼時候將它開始運行? 我知道java程序開始從main()
方法運行。但事情是客戶端程序沒有創建DailS
對象的代碼片段。它只是連接到Server
。客戶端程序不調用服務器端程序中的go()
。那麼如果go()
沒有運行,連接將如何完成。這是由java內部管理的嗎?
此連接請求是否會在DS中運行
main()
方法?
客戶端程序:
import java.io.*;
import java.net.*;
public class DailyCS
{
public void go{
try{
Socket s=new Socket("ip","port");
}
catch(IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
DailyCS server = new DailyCS();
server.go() ;
}
}
客戶端程序開始從主運行方法,創建一個對象server
,並調用go()
。 go()
有請求連接的代碼。但在任何時候,它都會創建一個服務器端類對象。它既不在服務器端類中調用go()
。那麼連接將如何完成?
main()
在服務器端程序中的用途是什麼?
客戶端從未連接到服務器......它只是產生一個套接字對象。主要方法的要點是運行該程序。這很簡單 –
你必須運行這兩個程序。在服務器端,程序將偵聽指定端口上的連接,並在客戶端,程序將與服務器上的端口建立連接。一旦連接完成,客戶端和服務器就能夠相互發送數據。客戶端和服務器端程序不會直接調用對方的方法 –
@Jitin Kodian這意味着服務器端程序應該全天候運行。對? –