0

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
    }

私が client() で持っているのと同じこと

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());

ネストされたすべての関数で使用します。
前もって感謝します。

4

2 に答える 2

0

サーバー/クライアントコントローラーとして機能するシングルトンクラスにそれらを配置することをお勧めします。適切なタイミングでそれらを初期化し、必要なすべてのゲッター (セッターではない) とユーティリティ メソッドがあることを確認して、他のクラスがソケット ストリームを操作できるようにします。

于 2013-04-29T20:25:46.283 に答える
0

アドバイスをくれたソティリオス・デリマノリスに感謝します。私はもっ​​とOOになることにしました。2 つのメソッドを持つクラスを作成しました。1 つはソケット接続を開始してストリームを割り当てるためのもので、もう 1 つはすべてを閉じるためのものです。例えば

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

}

}

サーバー側でもほぼ同じです。誰かの希望になれば幸いです。

于 2013-09-10T17:53:35.413 に答える