客户端和服务端的区别_客户端与服务端的区别与联系

一、基础概念

1、客户端与服务端

百度百科上的专业术语用多说,现在我想用最通俗易懂的语言来向大家描述一下这两个东西的概念

实际上两者不可分割,所以他们的概念会包含彼此

客户端:客户也就是你,客服端也就是你这一端可以接触到的程序,手机app,web网页等,我们可以在客户端的界面上向服务器发送请求以及数据,交给服务器处理
服务端:也就是提供为客户端提供“服务”,接收并储存客户端发送过来的数据或请求,并且对请求进行响应,发送数据给客户端

举个例子:

客户端和服务端的区别_客户端与服务端的区别与联系_第1张图片


所以我们在聊天时,发送给对方的信息是通过服务端间接转发的,客户端与客户端之间并没有直接交互。而且服务端也会有专门的算法对发送过来的信息进行检测。

2、IP地址与端口号

IP地址:用于找到主机,由网络地址与主机地址组成,网络地址表示互联网的哪一个网络,主机地址表示其属于网络下的哪一台主机。
端口号:用于找到主机下的特定进程提供的服务,每一个服务器都有独一无二的端口号

通俗来说,IP相当于小区地址,端口号相当于门牌号。
客户端只有知道小区号与门牌号才可以进门,接受服务端的服务
若端口号错误,就进错门了。

3、输入、输出流

客户端与服务端相互发送的数据都放在在输入,输出流里
获取信息从输入流中获取

InputStream in = client.getInputSream();
int i = in.read();//返回值为int型

但是read方法若是没有从输入流读到数据,就会一直阻塞在这里,直到读到信息为止,才会执行接下来的代码。
输出需要发送的信息在输出流中

OutputStream out = client.getOutputSream();
out.write();//参数类型为Byte或者Byte[]

二、服务端代码

创建服务端的核心代码非常简单

ServerSocket server = new ServerSocket(PORT);//PORT为指定的端口号,int类型

完整代码如下:

public class Server {

    public final int PORT = 9999;//端口号

    private ServerSocket server;//服务端
    private Socket client;//客户端
    private InputStream ins;
    private ObjectInputStream objectins;

    public Server(){
        try {
            server = new ServerSocket(PORT);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    public void getClient(){
        try {
            //等待客户机的连接
            client = server.accept();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Server server = new Server();
        server.getClient();
    }
}

如果像连接其他人电脑上的服务端,保证两台电脑在同一个网络下,将客户端的IP改为对方的IP即可

查看本机IP

ipconfig

accpet()方法

作用:用于接收连接服务端的客户端,如果一直没有客户端连接,就会阻塞在这里,直到有客户端连接
如果想要连接多个客户端,那么就可以这样

while(true){
	Socket client = server.accept();
}

三、客户端代码

public class ClientCnn {

    public Socket socket;
    OutputStream outs;
    public final int PORT = 9999;
    String IP = "127.0.0.1";//本机IP地址

    //连接服务器
    public boolean cnnToServer()  {
        try {
            socket = new Socket(IP,PORT);
            //获取输入输出流
            InputStream ins = socket.getInputStream();
            outs = socket.getOutputStream();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
}

若是服务端代码没有先于客户端代码运行,cnnToServer()方法就会返回false。


总结:
客户端:客户可以操纵的程序
服务端:为客户端提供服务的程序
IP:用于找到主机
端口:用于找到主机下某一特定进程的服务
输入流:接收信息
输出流:发送信息

你可能感兴趣的:(客户端和服务端的区别)