【发布时间】:2015-10-15 00:22:59
【问题描述】:
我正在尝试通过编写 java 程序(边做边学)来理解网络的主题。我使用 java.net.Socket 在 java 中编写了一个客户端和一个服务器。客户端是一个类,服务器是一个类。然后我在一个主类中实例化了这两个类。 java-Application 在我的电脑上运行。当我为客户端和服务器分配相同的端口时,我没有收到错误(例如:端口 80)。但是当我分配不同的端口(例如:端口 80 给服务器,端口 9090 给客户端)时,我得到一个错误。我应该使用相同的端口进行 tcp 连接吗? 我想了解为什么会出错。 这是我放在一个 java 包中的全部代码:
package client_server;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.*;
import java.util.Date;
public class Server {
ServerSocket server;
Server(){
System.out.println("server starts");
try{
//server runs on port 9090
server=new ServerSocket(9090);
}catch(IOException e){
e.printStackTrace();
}
}
void listen(){
Socket socket = null;
try {
System.out.println("server is listining");
socket=server.accept();
PrintWriter out =new PrintWriter(socket.getOutputStream(), true);
out.println(new Date().toString());
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package client_server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.*;
public class Client {
Socket clientSocket;
Client(){
System.out.println("Client starts");
final String server_ip_adress="127.0.0.1";
try {
clientSocket = new Socket(server_ip_adress,80);
} catch (IOException e) {
e.printStackTrace();
}
}
void connectToServer(){
try{
System.out.println("client connects to server");
InputStream clientInput=clientSocket.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(clientInput));
String answer = input.readLine();
System.out.println(answer);
}catch(IOException e){
e.printStackTrace();
}
}
}
package client_server;
public class Main {
public static void main(String [] args){
Server server = new Server();
Client client = new Client();
server.listen();
client. connectToServer();
}
}
理论上它应该可以工作,因为每个进程(服务器进程和客户端进程)都会被分配一个端口,并且进程间通信是否发生在不同的端口上并不重要。
但就我而言,我有一个流程。因此,当我分配不同的端口时,它会引发错误。我的分析正确吗? 我得到这个错误:地址已在使用中:JVM_Bind
【问题讨论】:
-
您可能需要阅读套接字基础知识。您可能还想显示相关代码和实际的异常消息。基本上,服务器侦听端口,客户端连接到同一个端口。
-
无论如何,您都不能在同一个 IP 上使用同一个端口,这让您的陈述难以相信。没有代码,我们无法回答。暂时关闭。
-
我有基础知识(理论背景),但我从未编写过有关该主题的程序。所以我现在就这样做了::)