我在我的IP地址找不到我的端口号

时间:2017-12-16 16:22:29

标签: java sockets network-programming serversocket

我正在尝试使用套接字创建聊天。要做到这一点,我需要使用名为 Socket 类JAVA 。在我的例子中,它有两个参数Socket(InetAddress address, int port) 我知道我的IP是什么,通过CMD中的命令:ipconfig

但是我不知道放入我的端口号是什么,因为我知道我在哪里可以找到它。
是否有任何命令,应用程序或其他东西可以获得端口号
我使用textpad 8创建 JAVA程序
有两个程序,变送器接收器

变送器代码

import java.net.*;
import java.io.*;
public class Program
{

    public static void main(String[] args)
    {
        try
        {

            ServerSocket pedido = new ServerSocket(12345);
            Socket conexao = pedido.accept();
            PrintWriter transmissor = new PrintWriter(conexao.getOutputStream());
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));

                String linha = null;

                do
                {

                    linha = teclado.readLine();
                    transmissor.println(linha);
                    transmissor.flush();

                }
                while (linha==null || !linha.toUpperCase().equals("FIM"));

                    transmissor.close();
                    conexao.close();
                    pedido.close();

        }

        catch(Exception erro)
        {
            System.out.println("Communication error");
        }

    }
}



接收者代码

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

public class Programa
{

public static void main(String[] args) {

            try
            {
            Socket conexao = new Socket("123.456.78.9",12345);
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
            BufferedReader receptor = new BufferedReader(new InputStreamReader(conexao.getInputStream()));

                String linha = null;
                do
                {

                        linha=receptor.readLine();
                        System.out.println(linha);

                }
                while(linha==null || !linha.toUpperCase().equals("FIM"));
                receptor.close();
                conexao.close();
            }

            catch(Exception erro)
            {
                System.out.println("Communication error");
                System.out.println("Error: " + erro);
            }
        }
 }

3 个答案:

答案 0 :(得分:0)

此构造函数中的“port”参数是您要在其上运行服务的端口。它与系统无关。您可以将其作为要运行此服务的任何端口号传递。

答案 1 :(得分:0)

该地址可让您进入机器。接收此请求的计算机,并根据添加的端口号将网络流量定向到正在运行的程序。

如果您不知道哪个程序应该接收您的请求,您需要找出答案。然后,您需要找出该程序正在侦听的端口号。什么短语"听"真正的意思是"操作系统将作为需要发送到程序的流量进行交互的端口号#34;。

如果您同时编写了客户端和服务器,那么您将在服务器中创建的ServerSocket参数将是"接受请求的端口号"上。对于服务器,这实际上是对操作系统的请求,要求将标记有此端口号的流量重定向为输入,以便在ServerSocket上读取。

如果您不知道服务器程序正在处理哪些端口,并且您已登录到该服务器,并且该服务器是Linux服务器,则可以运行命令

lsof -iTCP -sTCP:LISTEN

将列出程序服务器正在侦听的所有端口。

如果您不在该计算机上,则可以使用nmap之类的工具,但我建议您不要在事先未经许可的情况下在其他人的网络上使用它。许多人使用nmap来发现攻击服务器的可能路径,因此您的意图中的错误传达可能导致他们相信您是恶意攻击者。

答案 2 :(得分:0)

端口8100是一个非常安全的赌注。也就是说,端口是一个小于65536的整数,应用程序可以在一个或多个IP地址上侦听和响应。侦听特定TCP端口的应用程序应该是仅侦听该端口的 应用程序。一些端口分配是众所周知的#34;即使您当时没有碰巧运行其中一个应用程序,也可以通过查找它们来避免潜在的冲突。 (例如,参见https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers)。

如果您可能希望与将来某个时间使用Linux的朋友共享Java应用程序,则应避免使用1024以下的端口,否则他们需要配置特殊权限。

因此,首先避免使用常用的端口和端口以及低编号的端口来播放冲突避免游戏,然后从剩余的可用端口中挑选并验证您的系统是否已经在使用它。您可以使用netstat命令在Windows上执行此操作:

netstat -a -b | findstr 8100

如果您看到带有" LISTENING"的输出,则选择另一个,可能是8101,8102等。如果在10秒之后没有显示任何结果,那么您已经选择了优胜者。您也可以取消| findstr xxxx部分并查看结果。它按端口号排序,因此您只需在两个其他可接受的TCP端口号之间选择一个端口。