单个java程序可以通过两个不同的端口发送和接收数据吗

单个java程序可以通过两个不同的端口发送和接收数据吗,java,networking,Java,Networking,我在Router1类的Receive方法中编写了一个客户端程序,它通过端口号2000(比如)从服务器接收纯文本。现在,我想通过同一类Router1的send方法中的另一个端口号2001将这些数据从客户机程序发送到另一个程序,比如说(Client2)。这是允许的吗 我得到连接被拒绝:连接异常 import java.io.*; import java.util.*; import java.net.*; import java.sql.*; class Router{ String str; pu

我在Router1类的Receive方法中编写了一个客户端程序,它通过端口号2000(比如)从服务器接收纯文本。现在,我想通过同一类Router1的send方法中的另一个端口号2001将这些数据从客户机程序发送到另一个程序,比如说(Client2)。这是允许的吗

我得到
连接被拒绝:连接异常

import java.io.*;
import java.util.*;
import java.net.*;
import java.sql.*;
class Router{
String str;
public void receive(){
                           try{
                            while(true){
                            Socket so=new Socket("localhost",2000);
                            BufferedReader br=new BufferedReader(new InputStreamReader(so.getInputStream()));
                            str=br.readLine();
                            System.out.println("server has sent:"+str);
                            so.close();}
                                  }catch(IOException e){
                                        e.printStackTrace();}
                }
public void send(){
    int i,index=0,min=100;
    int row=2;
    try{
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         Connection cn=DriverManager.getConnection("jdbc:odbc:DSN2");
         Statement st=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        ResultSet rs=st.executeQuery("select * from Table1");
        //rs.absolute(row);
        rs.next();
        rs.next();
        //System.out.println(rs.getInt(1)+"\t"+rs.getInt(2)+"\t"+rs.getInt(3)+"\t"+rs.getInt(4)+"\t"+rs.getInt(5)+"\t"+rs.getInt(6));
        for( i=2;i<7;i++){  
            int value=rs.getInt(i);
            System.out.println("hello");
                  if(value<min){
                index=i;
                min=value;}
        }
        System.out.println("min is"+min);
        System.out.println("AT index"+index);
        switch(index){
            case 2:
                ioConnect();
                break;
            case 3:
                ioConnect();
                break;
            case 4:
                ioConnect();
                break;
            case 5:
                ioConnect();    
                break;
            case 6:
                ioConnect();
                break;
        }

    }catch(Exception e){
        e.printStackTrace();
    }
}


public void ioConnect(){
    try{
        ServerSocket ss=new ServerSocket(2001);
        Socket so=ss.accept();
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("enter the message");
        String str=br.readLine();
        PrintStream ps=new PrintStream(so.getOutputStream());
        ps.println(str);
    }
    catch(Exception e){
        e.printStackTrace();
    }
}
}
class Router1{
public static void main(String s[]){
    Router obj=new Router();
    obj.receive();
    obj.send();
}
}
import java.io.*;
导入java.util.*;
导入java.net。*;
导入java.sql.*;
类路由器{
字符串str;
公共接收(){
试一试{
while(true){
Socket so=新套接字(“localhost”,2000);
BufferedReader br=新的BufferedReader(新的InputStreamReader(so.getInputStream());
str=br.readLine();
System.out.println(“服务器已发送:”+str);
so.close();}
}捕获(IOE异常){
e、 printStackTrace();}
}
公共无效发送(){
int i,指数=0,最小值=100;
int行=2;
试一试{
forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
连接cn=DriverManager.getConnection(“jdbc:odbc:DSN2”);
语句st=cn.createStatement(ResultSet.TYPE\u SCROLL\u敏感,ResultSet.CONCUR\u可更新);
结果集rs=st.executeQuery(“从表1中选择*);
//绝对卢比(世界其他地区);
rs.next();
rs.next();
//System.out.println(rs.getInt(1)+“\t”+rs.getInt(2)+“\t”+rs.getInt(3)+“\t”+rs.getInt(4)+“\t”+rs.getInt(5)+“\t”+rs.getInt(6));

对于(i=2;i确定它是允许的。拒绝连接只是意味着该端口上没有任何侦听内容,因此您的程序显然不能正常工作。

确定它是允许的。拒绝连接只是意味着该端口上没有任何侦听内容,因此您的程序显然不能正常工作。

如果您的Client2程序正在不同的端口上运行。例如,在同一系统上,可以有两个java进程在不同的端口上运行。它们始终可以在正在侦听的端口上通信。如果您的Client2程序在不同的端口上运行,则这是可能的。例如,在同一系统上,可以有两个java进程在不同的端口上运行。它们可以方法通过他们正在侦听的端口进行通信

基本上是允许的。但这取决于你的代码是否能正常工作!两个端口是否使用相同的套接字?@icbytes否我使用不同的套接字我们当然需要查看一些代码。我发布了代码,基本上是允许的。但这取决于你的代码是否能正常工作!你使用了吗两个端口的ame套接字?@icbytes否我使用不同的套接字我们当然需要看一些代码。我发布了代码,我有一个名为Router1的程序。在Router1中有两种方法1.receive 2.send。在receive中,连接到服务器的端口号是2000,在send中,我使用2001发送到另一个名为Router2的程序。Router1和Router2正在运行on相同的java进程?Router1和Router2是不同的程序我有一个名为Router1的程序。在Router1中有两种方法1.receive 2.send.In连接到服务器的接收端口号是2000,在send中我使用2001发送到另一个名为Router2的程序。Router1和Router2在同一个java进程上运行?Router1和Router2是不同的程序