标签:网络通信 编程 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(); } }
计算机网络通信中的端口到底是什么意思?IP、端口号与计算机、操作系统、进程、线程之间的关系是什么?编程的时候怎么正确理解这些关系?
标签:网络通信 编程 buffere except throw img image client 网卡
原文地址:https://www.cnblogs.com/mkl34367803/p/14672896.html