【问题标题】:Java and TCP messages - messages sending on different ports each timeJava 和 TCP 消息 - 每次在不同端口上发送的消息
【发布时间】:2013-10-12 15:53:00
【问题描述】:

我对网络和使用网络通过编程发送消息非常陌生。无论如何,我有一个客户端和服务器 java 命令行应用程序(服务器在具有桥接网络适配器的同一台机器上的 VM 中运行,并且主机到来宾 ping 工作,反之亦然),它会出现在服务器端,每个它收到的消息来自不同的端口。这是正常行为吗?当机器的端口用完时会发生什么? Java 的库在使用完端口后会智能地关闭它们吗?

所以基本上,这甚至是一个问题吗?如果是,我该如何修复它? 来自服务器的输出,然后是下面列出的客户端代码

发送一些消息后的服务器输出:

Received (/192.168.1.122:59628): shsfh

Received (/192.168.1.122:59629): dfsh

Received (/192.168.1.122:59631): dfh

Received (/192.168.1.122:59632): fdshdf

Received (/192.168.1.122:59633): shf

Received (/192.168.1.122:59637): fgfggsdfhsfdh

Received (/192.168.1.122:59638): fdshf

Received (/192.168.1.122:59639): hs

Received (/192.168.1.122:59640): hfh

发送这些消息的客户代码:

import java.io.*;
import java.util.*;
import java.net.*;
class TCPClient
{
  public static void main(String argv[]) throws Exception
  {   Scanner scan = new Scanner(System.in);
       while (true)
       {
          String msgcont = scan.nextLine();
          System.out.println(tcpSend("192.168.1.153", 6789, 5000, msgcont));
       }
   }

public static String tcpSend(String ip, int port, int timeout, String content)
{
     String ipaddress = ip;
     int portnumber = port;
     String sentence;
     String modifiedSentence;
     Socket clientSocket;
     try
     {
         clientSocket = new Socket(ipaddress, portnumber);
         DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
         BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
         outToServer.writeBytes(content + '\n');
         clientSocket.setSoTimeout(timeout);
         modifiedSentence = inFromServer.readLine();
         clientSocket.close();
             outToServer.close();
         inFromServer.close();
     }
     catch (Exception exc)
     {
          modifiedSentence = "";
     }
          return modifiedSentence;
}
}

【问题讨论】:

  • 您正在为发送的每条评论创建一个新连接,因此它将位于不同的端口上。如果您每次使用相同的连接,效率会提高 100 倍,并且每次都使用相同的端口。
  • 感谢 Peter 和 neeagl 的快速而有用的回复。他们都很有帮助。

标签: java networking tcp ip port


【解决方案1】:

是的,每次您打开到其他主机的套接字时,都可以从您计算机上的任何剩余端口发起连接。操作系统选择下一个可用端口并建立连接。

有 65536 个开放端口可用,其中前 1-1024 个端口由系统保留。

【讨论】:

  • +1 从技术上讲,前约 48K 保留用于不同目的,“49152–65535”对于临时端口是免费的,但除非您是 root,否则 Linux 不会使用前 1024。 Windows 没有那么严格。 en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
  • 非root用户可以使用1024,但不能使用1023。
猜你喜欢
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 2013-06-28
相关资源
最近更新 更多