Server Side程序连接详细信息

时间:2016-02-19 05:49:46

标签: java sockets socketserver

我已经完成了我在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() ;
    }
    }

客户端程序从main方法开始运行,创建对象server并调用go()go()具有请求连接的代码。但在任何时候,它都不会创建服务器端类对象。它既不调用服务器端类中的go()。那么连接将如何完成?

main()在服务器端程序中的用途是什么?

1 个答案:

答案 0 :(得分:2)

网络101.

服务器有一个开放的端口" listen"通过ServerSocket。这会侦听传入的连接。

客户端也有一个Socket,但它是一个到服务器套接字的传出连接。服务器必须正在运行并侦听以进行连接,以便客户端进行通信。

此服务器程序与客户端完全分开。除非显式通过套接字连接,否则它们不共享变量。仅仅因为有类似的命名方法和类,并不能使它们相同。

这两个程序都需要main方法才能实际运行,因为这是Java。两种go方法都在各自的类中运行,但只有服务器套接字实际上是在接受连接。客户端代码生成套接字对象并连接到服务器(假设服务器代码在客户端代码之前运行)。