我已经完成了我在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()
在服务器端程序中的用途是什么?
答案 0 :(得分:2)
网络101.
服务器有一个开放的端口" listen"通过ServerSocket。这会侦听传入的连接。
客户端也有一个Socket,但它是一个到服务器套接字的传出连接。服务器必须正在运行并侦听以进行连接,以便客户端进行通信。
此服务器程序与客户端完全分开。除非显式通过套接字连接,否则它们不共享变量。仅仅因为有类似的命名方法和类,并不能使它们相同。
这两个程序都需要main方法才能实际运行,因为这是Java。两种go方法都在各自的类中运行,但只有服务器套接字实际上是在接受连接。客户端代码生成套接字对象并连接到服务器(假设服务器代码在客户端代码之前运行)。