我应该为基于tcp的服务器-客户端连接使用相同的端口吗

阿米塔克

我试图通过编写Java程序(边做边学)来理解网络的主题。我使用java.net.Socket在Java中编写了客户端和服务器。客户端是一类,服务器是一类。然后,我在一个Main-class中实例化了这两个类。Java应用程序在我的计算机上运行。当我为客户端和服务器分配相同的端口时,我没有收到任何错误(例如:端口80)。但是,当我分配不同的端口(例如:服务器的端口80和客户端的端口9090)时,出现错误。我应该使用相同的端口进行tcp连接吗?我想了解为什么会出错。这是我的整个代码放在一个Java包中:

package client_server;
import java.io.IOException;
import java.io.PrintWriter;
import  java.net.*;
import java.util.Date;


public class Server {
    ServerSocket server;
    Server(){
       System.out.println("server starts");
        try{
        //server runs on port 9090
         server=new ServerSocket(9090);
        }catch(IOException e){
           e.printStackTrace();
        }
    }

void listen(){
    Socket socket = null;
    try {
        System.out.println("server is listining");
        socket=server.accept();
        PrintWriter out =new PrintWriter(socket.getOutputStream(), true);

        out.println(new Date().toString());
    } catch (IOException e) {
        e.printStackTrace();
    }finally{
        try {
            socket.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   
}       

}

package client_server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.*;
public class Client {
    Socket clientSocket;
    Client(){
        System.out.println("Client starts");
        final String server_ip_adress="127.0.0.1";
        try {
            clientSocket = new Socket(server_ip_adress,80);
        } catch (IOException e) {
            e.printStackTrace();
       }
   }

void connectToServer(){
    try{
        System.out.println("client connects to server");
        InputStream clientInput=clientSocket.getInputStream();
        BufferedReader input =  new BufferedReader(new InputStreamReader(clientInput));
        String answer = input.readLine();
        System.out.println(answer);

    }catch(IOException e){
        e.printStackTrace();
    }   
}

}

package client_server;
public class Main {
    public static void main(String [] args){
        Server server = new Server();
        Client client = new Client();
        server.listen();
        client. connectToServer();
   }
}

从理论上讲,它应该起作用,因为将为每个进程(服务器进程和客户端进程)分配一个端口,并且进程间通信是否发生在不同的端口上无关紧要。

但就我而言,我只有一个过程。因此,当我分配不同的端口时,会引发错误。我的分析正确吗?我收到此错误:地址已在使用中:JVM_Bind

用户名

服务器侦听端口9090,因此客户端必须连接到端口9090。但是并非为客户端分配了9090端口。实际上,当您netstat在连接客户端后运行时,您会看到客户端是使用系统分配的另一个端口。

注意,当您打印“客户端连接到服务器”时,客户端已经连接(new Socket(...)返回时)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

oAuth服务器应该为相同的客户端请求提供相同的accessToken吗?

客户端和服务器是否需要使用相同的端口进行连接?

客户端和服务器都使用相同的端口吗?

TCP套接字服务器/客户端连接应使用哪个IP /端口?

TCP客户端可以使用同一端口连接另一台服务器吗?

将客户端连接到具有相同IP和端口的两台服务器

我应该为不同类型的用户使用单独的快递服务器吗

我的TCP客户端未连接到我的TCP服务器

我应该为文件传输场景选择哪个服务器端应用程序

是否应该为服务器的异步响应而更改HTTP客户端?

我应该为 Ubuntu 用户提供特殊的域服务器吗?

是否可以使用客户端javascript连接到sftp服务器。安全吗?

TCP套接字服务器客户端连接fd会导致内存泄漏吗?

TCP 客户端 - 服务器连接

应该为服务器打开哪些端口?

从客户端连接到基于Sails的服务器

使用C#的TCP / IP服务器/客户端多连接并接收客户端的公共IP地址

我应该在客户端/服务器应用程序中使用套接字吗?

使用Mockito模拟服务器-客户端连接

使用ns3的基于TCP的客户端-服务器系统

我应该将服务器的ca.crt复制到客户端吗?

TCP客户端程序无法连接到我的服务器

我可以使用 python 服务器而不是 C++ 客户端建立 tcp/ip 套接字吗?

Nodejs TCP连接客户端端口分配

TCP客户端连接超出定义的端口范围

我应该为ios客户端启用cors吗?

我应该为我的REST API的使用者使用客户端证书吗?

使用g ++的TCP服务器客户端

WinSCP:如何找到服务器和客户端的当前连接端口?