【问题标题】:Read data from a particular port and specified IP using java使用java从特定端口和指定IP读取数据
【发布时间】:2023-09-03 20:45:01
【问题描述】:

我想从特定端口读取消息。例如,IP 为 1.2.3.4,端口为 1000。该 IP 已用于接收一些消息。我想做的是监听那个特定的 IP 并使用 java 程序接收所有消息。将要 SocketServer 的用途??

ServerSocket ss = new ServerSocket(1000);
Socket socket = new Socket("1.2.3.4",1000);
socket = ss.accept();

是否可以读取特定 IP 和端口接收到的所有内容?

【问题讨论】:

  • @HussainAl-Mutawa 后半部分!!其他地方的java程序并监听发送到1.2.3.4的所有消息..
  • 请记住,在某些系统中,您不能轻易使用低于 1024 的端口。为了安全起见,请选择更大的端口号。
  • @Lauri 不用担心,因为它是接收数据的专用端口。
  • 服务器使用的是什么操作系统?您在哪些用户权限下运行您的服务器程序?
  • 您的代码是服务器和客户端的混合体。在服务器中,您通过accept() 获取每个Socket,并且没有第2 行。在客户端中,您只有第2 行。

标签: java sockets port serversocket


【解决方案1】:

要监听特定地址,您必须像这样创建一个 ServerSocket

ServerSocket ss = new ServerSocket(); // Unbound socket
ss.bind(new InetSocketAddress("1.2.3.4", 1000)); // Bind the socket to a specific interface
Socket client = ss.accept();

这样,服务器套接字绑定到特定的网络接口,并且只会接收来自它的传入连接。

【讨论】:

  • 哦.. 感谢您的快速回复.. 但程序返回此错误:' java.net.BindException:无法分配请求的地址:JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(本机方法) 在 java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:96) 在 java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376) 在 java.net.PlainSocketImpl.bind(PlainSocketImpl.java:175) 在 java.net .ServerSocket.bind(ServerSocket.java:376) at java.net.ServerSocket.bind(ServerSocket.java:330)'
  • @user1640534 要么是使用了端口,要么是因为此地址未绑定到您的任何网络接口。
最近更新 更多