这应该很简单,但我在这里错过了一些东西。我有两个玩具类:(a)一个需要连接并提供文件的服务器;和 (b) 请求文件并将其打印在标准输出上的客户端。
服务器代码:
package lp2.tarefa4;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import static java.lang.String.format;
import java.net.ServerSocket;
import java.net.Socket;
public class ServidorWeb implements Runnable {
private final String dirName;
public ServidorWeb(String dirName) {
this.dirName = dirName;
}
public static void main(String[] args) {
ServidorWeb srv = new ServidorWeb(args[0]);
srv.run();
}
@Override
public void run() {
System.out.println("Server started. Waiting for connections...");
while (true) {
try {
ServerSocket server = new ServerSocket(48080);
Socket socket = server.accept();
proccessRequest(socket);
}
catch (IOException ex) {
System.err.println("!!! ERRO: " + ex.getMessage());
}
}
}
private void proccessRequest(Socket socket) throws IOException {
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
String fileName = in.readUTF();
File inputFile = new File(dirName, fileName);
String msg = format("Request: %s:%d [%s]",
socket.getInetAddress(),
socket.getPort(),
inputFile.getPath());
System.out.println(msg);
DataInputStream fin = new DataInputStream(new FileInputStream(inputFile));
String s = fin.readUTF();
while (s != null) {
out.writeUTF(s);
s = fin.readUTF();
}
in.close();
out.close();
fin.close();
}
}
客户代码:
package lp2.tarefa4;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class ClienteWeb implements Runnable {
private final String host;
private final int port;
private final String fileName;
public ClienteWeb(String host, int port, String fileName) {
this.host = host;
this.port = port;
this.fileName = fileName;
}
public static void main(String[] args) {
ClienteWeb srv = new ClienteWeb(args[0], Integer.parseInt(args[1]), args[2]);
srv.run();
}
@Override
public void run() {
try {
Socket socket = new Socket(host, port);
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(fileName);
String s = in.readUTF();
while (s != null) {
System.out.println(s);
s = in.readUTF();
}
in.close();
out.close();
socket.close();
}
catch (IOException ex) {
System.err.println("!!! ERRO: " + ex.getMessage());
}
}
}
我试图在同一台机器上同时运行服务器和客户机,但是每次我试图运行客户机时,总是从服务器得到这条消息:
!!!ERRO:地址已在使用中(绑定失败)
要运行这段代码而不出错,我还需要做什么不同于上面的事情吗?
谢谢。
该错误通常意味着您尝试打开的端口已被其他应用程序使用,请尝试使用netstat查看哪些端口已打开,然后使用可用端口。
还要检查您是否绑定到正确的IP地址(我假设它会localhost)
netstat-tulpn
将使一个人能够找到正在使用特定端口的进程ID。
问题内容: 我正在尝试将套接字绑定到以下端口: 但是它给出: 为什么会发生此错误? 问题答案: 该错误通常表示您尝试打开的端口已被另一个应用程序使用。尝试使用netstat查看哪些端口已打开,然后使用可用端口。 还检查您是否绑定到正确的IP地址(我假设它是本地主机)
我正在尝试将套接字绑定到以下端口: 但它给出: 为什么会出现这个错误呢?
docker构建失败,“地址已在使用中” 我的/etc/docker/daemon.json是: 编辑: edit2 Docker-信息:
问题内容: 当我在Docker项目中运行时,它失败并显示以下消息: 显示如下: 我已经尝试过了,但是没有帮助。 问题答案: 在您的情况下,使用该端口的是其他一些过程,如注释中所述,它帮助您解决了问题。 在其他情况下(我本人也曾多次遇到),它大多是在其他情况下运行的同一容器。在那种情况下非常有帮助,因为我经常让相同的容器在其他目录中运行,然后尝试在其他使用相同容器名称的地方再次运行。 如何为我提供帮
我有一个运行 IBM worklight 项目的 eclipse 工作区,我想在不同的端口上使用另一个 worklight 项目运行另一个 eclipse 实例。我已经修改了服务器.xml其具有Http端口,如下所示: 以及管理端口,如下所示: 但是当我启动第二台服务器时,我收到以下错误: 本机方法中的致命错误:JDWP没有初始化传输,jvmtiError=AGENT_ERROR_TRANSPOR
我有一个测试应用程序,我创建了一个测试应用程序,用于开始使用Eclipse学习weblogic。昨天,当我作为/在服务器上运行时,jsp页面运行良好,我得到了我创建的基本页面。但今天我有一条错误消息: 本机方法中的致命错误:JDWP没有初始化传输,jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)错误:传输错误202:绑定失败:地址已在使用错误:JDWP传输dt_