【发布时间】:2011-10-07 07:00:07
【问题描述】:
我正在编写一个软件,我受到无法使用套接字连接到使用 ServerSocket 的 java 应用程序的限制。
我想我会尝试使用 URL 连接,因为可以定义要连接的端口
例如:
127.0.0.1:62666
我让我的服务器应用程序监听连接并将输入输出到 jTextArea。通过浏览器连接服务器(127.0.0.1:62666)时,输出:
GET / HTTP/1.1
GET /favicon.ico HTTP/1.1
我有另一个应用程序通过 URL 连接连接到 ServerSocket:
try{
URL url = new URL("http://127.0.0.1:62666");
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
connection.connect();
PrintWriter writer = new PrintWriter(connection.getOutputStream());
writer.print("Hello");
System.out.println("should have worked");
writer.flush();
writer.close();
}catch(IOException e){
e.printStackTrace();
}
它打印出“应该可以工作”的消息仅供参考,但它从不向服务器的 jTextArea 写入任何内容。服务器应用程序的代码如下所示:
try{
ServerSocket serverSock = new ServerSocket(62666);
while(doRun){
Socket sock = serverSock.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
PrintWriter writer = new PrintWriter(sock.getOutputStream());
InfoReader.gui.writeToTextArea(reader.readLine() + " From IP: " + sock.getInetAddress() + "\n");
writer.println("Testing123");
writer.close();
reader.close();
}
}catch(IOException e){
e.printStackTrace();
}
注意:通过浏览器连接时会显示文本“Testing123”。
所以我想知道如何以我尝试的方式执行此操作,或者可能读取访问 ServerSocket 的 URL,因此我可以在传递参数(在 URL 中)的同时通过 URL 访问它。
希望这是有道理的:)
谢谢, 迈克。
【问题讨论】:
-
如果你不被允许使用套接字连接......你意识到每个 TCP 连接,包括 URLConnection,都使用一个套接字,对吧?
-
服务器收到消息了吗?
-
@ryan:我意识到这一点。很难解释。短篇小说:不允许自己直接实例化 Socket 对象。 @john:不,不是。似乎每当我运行应该连接到它的应用程序时,服务器就会“卡住”。每当我尝试通过浏览器连接到 ServerSocket 之后时,它都会继续尝试连接。
-
迈克,你有没有找到解决办法?我很想知道你发现了什么或选择做什么。
-
我从未找到使用 URL 的方法。对于我正在做的事情,目前还不允许我实例化套接字对象,所以我几乎没有足够的能力......感谢您的兴趣:)
标签: java sockets url browser serversocket