2014-01-30 63 views
0

我編寫了一個客戶端程序,通過端口號2000(比如說)在Router1類的接收方法中從服務器接收純文本。現在,我想通過另一個端口號2001在同一類Router1的發送方法中將這些數據從客戶端程序發送到另一個程序(Client2)。這是允許的方式嗎?可以通過兩個不同的端口發送和接收數據

我得到Connection refused:connect exception

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(); 
} 
} 
+0

基本上它是允許的。但它取決於你的代碼,如果它甚至可以工作! – bobbel

+0

對兩個端口使用相同的套接字嗎? – icbytes

+0

@icbytes否我使用不同的套接字 – Intriguing

回答

4

確定它是允許的。拒絕連接意味着沒有任何監聽端口,所以你的程序顯然不能正常工作。

0

如果你的Client2程序運行在不同的端口上,這是可能的。例如,可以有兩個java進程在不同的端口上運行在同一個系統上。他們總是可以在他們正在收聽的端口上進行通信

+0

我有一個單一的程序名爲Router1.In Router1兩種方法1.receive 2.send.In接收端口號連接到服務器是2000年,在發送我使用2001年發送到另一個程序命名爲Router2。 – Intriguing

+0

ROuter1和Router2在同一個java進程上運行? –

+0

Router1和Router2是不同的程序 – Intriguing

相關問題