2013-04-29 65 views
0

我有用java編寫的客戶端/服務器程序(使用套接字)。它具有建立連接的多種功能。例如:服務器客戶端初始化(只有一次)java

public static void some_sender(byte[] x0, byte[] x1) //he is a server 
{ 
    ServerSocket s=new ServerSocket(8888); 
    s.setSoTimeout(10000); 
    Socket incoming=s.accept(); 
    ObjectOutputStream oos = new ObjectOutputStream(incoming.getOutputStream()); 
    ObjectInputStream ios = new ObjectInputStream(incoming.getInputStream()); 

    //some sending and receiving 
    some_sender0(a); 

} 

public static void some_sender0(int a) 
    { 
     ServerSocket s=new ServerSocket(8888); 
     s.setSoTimeout(10000); 
     Socket incoming=s.accept(); 
     ObjectOutputStream oos = new ObjectOutputStream(incoming.getOutputStream()); 
     ObjectInputStream ios = new ObjectInputStream(incoming.getInputStream()); 

     //some sending and receiving 
    } 

我有一個客戶端()

public static byte[] some_receiver(byte b) 
{ 
    Socket s=new Socket("127.0.0.1", 8888); 
    ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 
    ObjectInputStream ios=new ObjectInputStream(s.getInputStream()); 
    //some sending and receiving 
    byte[] t=some_receiver0(c); 
    return m; 
} 

public static byte[] some_receiver0(byte c) 
{ 
    Socket s=new Socket("127.0.0.1", 8888); 
    ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 
    ObjectInputStream ios=new ObjectInputStream(s.getInputStream()); 
    //some sending and receiving 

    return y; 
} 

我的問題是如何執行同樣的事情(初始化服務器)

ServerSocket s=new ServerSocket(8888); 
s.setSoTimeout(10000); 
Socket incoming=s.accept(); 
ObjectOutputStream oos = new ObjectOutputStream(incoming.getOutputStream()); 
ObjectInputStream ios = new ObjectInputStream(incoming.getInputStream()); 

和(客戶端)

Socket s=new Socket("127.0.0.1", 8888); 
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 
ObjectInputStream ios=new ObjectInputStream(s.getInputStream()); 

只有一次,並將其用於所有嵌套 功能。
預先感謝您。

+1

靜態字段或改變它並使用實例變量(如果你想成爲更多的OO)。 – 2013-04-29 20:22:30

回答

0

謝謝Sotirios Delimanolis的建議。我決定做更多的面向對象。創建了一個有兩種方法的類。一個用於啓動Socket連接和分配流,另一個用於關閉事件。例如。

import java.io.*; 
import java.net.*; 

public class NetworkTransfers { 

public Socket s = null; 
public ObjectOutputStream oos = null; 
public ObjectInputStream ios = null; 

public void activateNetwork() 
{ 
    try { 
     s = new Socket("IP-address", Port); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     oos = new ObjectOutputStream(s.getOutputStream()); 
     ios = new ObjectInputStream(s.getInputStream()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  

} 

public void closeConnections() 
{ 
    try { 
     s.close(); 
     ios.close(); 
     oos.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

} 

在服務器端相當相似。 希望有人會有希望。

0

我建議把它們放到作爲服務器/客戶端控制器的Singleton類中。在適當的時候初始化它們,並確保它們具有所有必要的getter(而不是setter)和實用程序方法,以便其他類可以使用套接字流。

+0

我將非常感謝代碼,因爲我在Java中不太好 – 2013-04-30 03:35:02