码迷,mamicode.com
首页 > 编程语言 > 详细

计算机网络通信中的端口到底是什么意思?IP、端口号与计算机、操作系统、进程、线程之间的关系是什么?编程的时候怎么正确理解这些关系?

时间:2021-04-20 14:41:28      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:网络通信   编程   buffere   except   throw   img   image   client   网卡   

如何理解IP、端口号与计算机、操作系统、进程、线程的关系?

IP是计算机维度的。一个IP对应一个网卡。不过有的计算机可以有多个网卡。

端口号是线程维度的,用于不同计算机之间的线程进行通信。

 

为什么客户端需要知道服务端的端口号,服务端不需要知道客户端的端口号呢?

客户端的端口是随机产生的,服务端接受客户端的请求的socket里面,带有客户端的端口号。

 

如下是服务端代码:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerSocketTest {
    public static void main(String[] args) {
        new Thread(new MyServerSocket(30000)).start();
        new Thread(new MyServerSocket(40000)).start();
        while (true){

        }
    }
}

class MyServerSocket implements  Runnable{
    private int port;
    public MyServerSocket(int port){
        this.port=port;
    }

    @Override
    public void run() {
        try {
            ServerSocket ss=new ServerSocket(port);
            while (true){
                Socket socket = ss.accept();
                OutputStream outputStream = socket.getOutputStream();
                PrintStream printStream = new PrintStream(outputStream);
                printStream.println("hello current thread is "+Thread.currentThread().getName());
                printStream.close();
                socket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

 

如下是客户端代码:(两个客户端)

import java.io.*;
import java.net.Socket;

public class ClientSocket {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 30000);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = bufferedReader.readLine();

        System.out.println("来自服务器的数据"+line);
        bufferedReader.close();
        socket.close();
    }
}

 

 

 

import java.io.*;
import java.net.Socket;

public class ClientSocket222 {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 40000);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = bufferedReader.readLine();
        System.out.println("来自服务器的数据"+line);
        bufferedReader.close();
        socket.close();
    }
}

 

 

在server打上断点,可以看到客户端请求的IP和端口号,客户端的端口号57276是一个随机的线程端口号。而服务端的30000端口号由于需要监听客户端的连接,所以客户端需要知道这个端口号。

 技术图片

 

 

 



 

计算机网络通信中的端口到底是什么意思?IP、端口号与计算机、操作系统、进程、线程之间的关系是什么?编程的时候怎么正确理解这些关系?

标签:网络通信   编程   buffere   except   throw   img   image   client   网卡   

原文地址:https://www.cnblogs.com/mkl34367803/p/14672896.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!