2016-04-30 1 views
-1

私はJavaでマルチクライアントサーバープログラムを実行しようとしました。私はそれを1台のマシンで実行しているときに実行していましたが、別のマシンで実行していて実行していませんでした。マルチクライアントサーバーを作成した後、2つの数値が入力され、(+、 - - 、*、/、^)。適切なコードを教えてください。また、もし私たちがnoのようなことをしたら、2456789345それからそれは受け入れられないでしょう。範囲を越えると、私たちはフォークとジョインをjavaを使って実行する必要があります。JavaでMultiClientサーバーを実行し、それらの間でコマンドを渡す方法

for client: 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
public class client 
{ 
private static Socket socket; 
public static void main(String args[]) 
{ 
try 
{ 
String host = "localhost"; 
int port = 25000; 
InetAddress address = InetAddress.getByName(host); 
socket = new Socket(address, port); 
//Send the message to the server 
OutputStream os = socket.getOutputStream(); 
OutputStreamWriter osw = new OutputStreamWriter(os); 
BufferedWriter bw = new BufferedWriter(osw); 
String number = "16"; 
String sendMessage = number + "\n"; 
bw.write(sendMessage); 
bw.flush(); 
System.out.println("Message sent to the server : "+sendMessage); 
//Get the return message from the server 
InputStream is = socket.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String message = br.readLine(); 
System.out.println("Message received from the server : " +message); 
} 
catch (Exception exception) 
{ 
exception.printStackTrace(); 
} 
finally 
{ 
//Closing the socket 
try 
{ 
socket.close(); 
} 
catch(Exception e) 
{ 
e.printStackTrace(); 
} 
} 
} 
} 
for server: 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.ServerSocket; 
import java.net.*; 
public class server 
{ private static Socket socket; 
public static void main(String[] args) 
{ 
try 
{ 
int port = 25000; 
ServerSocket serverSocket = new ServerSocket(port); 
System.out.println("Server Started and listening to the port 25000"); 
while(true) 
{ 
socket = serverSocket.accept(); 
InputStream is = socket.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String number = br.readLine(); 
System.out.println("Message received from client is "+number); 
String returnMessage; 
try 
{ 
int numberInIntFormat = Integer.parseInt(number); 
int returnValue = numberInIntFormat*2; 
returnMessage = String.valueOf(returnValue) + "\n"; 
} 
catch(NumberFormatException e) 
{ 
//Input was not a number. Sending proper message back to client. 
returnMessage = "Please send a proper number\n"; 
} 
//Sending the response back to the client. 
OutputStream os = socket.getOutputStream(); 
OutputStreamWriter osw = new OutputStreamWriter(os); 
BufferedWriter bw = new BufferedWriter(osw); 
bw.write(returnMessage); 
System.out.println("Message sent to the client is "+returnMessage); 
bw.flush(); 
} 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 
finally 
{ 
try 
{ 
socket.close(); 
} 
catch(Exception e){} 
} 
} 
} 

しかし、私はユーザーから2つの番号を取って、(add、sub、mul、div)のようなタスクを実行したいと思います。だから私はそのコードが必要です。

+0

具体的な質問は何ですか、まだ何を試しましたか、その他の明白な質問ですか? – Nico

+0

コードはどこですか?何が問題なのですか? – Polygnome

+0

「実行していません」は問題の説明ではありません。強くお試しください。 – EJP

答えて

0

クライアント:

import javax.swing.*; 
import java.io.*; 
import java.net.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.Scanner; 

class multipleclient extends JFrame implements ActionListener, Runnable, FocusListener 
{ 
    Thread sd,r; 

    Socket s; 
    DataOutputStream ds; 
    Scanner sc; 
    String msg,msg1; 
    JTextField text; 
    JButton send; 
    JTextArea chat; 
    volatile boolean val=false; 

    multipleclient() 
    { 
     try 
     { 
      s=new Socket("localhost",999); 
      ds=new DataOutputStream(s.getOutputStream()); 
      sc=new Scanner(s.getInputStream()); 
     } 

     catch(IOException e) 
     { 
      System.out.println("IOException"); 
     } 

     Container c=getContentPane(); 
     c.setLayout(new FlowLayout()); 

     text=new JTextField(30); 
     text.setText("Enter your message"); 
     text.addFocusListener(this); 
     send=new JButton("send"); 
     chat=new JTextArea(10,10); 
     chat.setEditable(false); 

     c.add(chat); 
     c.add(text); 
     c.add(send); 

     send.addActionListener(this); 

     sd=new Thread(this,"send"); 
     r=new Thread(this,"receive"); 
     sd.start(); 
     r.start(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public void actionPerformed(ActionEvent ae) 
    { 
     val=true; 
    } 

    public void focusGained(FocusEvent fe) 
    { 
     text.setText(""); 
    } 

    public void focusLost(FocusEvent fe){} 

    public void run() 
    { 
     while(true) 
     { 
     // System.out.println("In While loop"); 
      if(Thread.currentThread()==sd) 
      { 

       try 
       { 
        if(val) 
        { 

         msg=text.getText(); 
         if(!(msg.equals(null))) 
         { 
          ds.writeBytes(msg+"\n"); 
          text.setText("Enter your message"); 
          val=false; 
         } 
        } 
       } 

       catch(IOException e) 
       { 
        System.out.println("IOException"); 
       } 
      } 

      else if(Thread.currentThread()==r) 
      { 

       msg1=sc.nextLine(); 

       chat.append(msg1+"\n"); 
      } 
     } 
    } 

    public static void main(String s[]) 
    { 
     multipleclient mc1=new multipleclient(); 
     mc1.setSize(300,300); 
     mc1.setVisible(true); 
     mc1.setTitle("Client"); 
    } 
} 

サーバー:

import javax.swing.*; 
import java.io.*; 
import java.net.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.Scanner; 

class SingleFrameServer1 extends JFrame implements ActionListener, FocusListener, Runnable 
{ 
    Thread r[]; 
    ServerSocket ss; 
    Socket s[]; 
    Container c; 
    DataOutputStream ds[]; 
    Scanner sc[]; 
    static String msg,msg1; 
    static JTextField text; 
    static JButton send[]; 
    JTextArea chat; 
    volatile boolean val; 
    int n; 

    SingleFrameServer1() 
    { 
     n=0;  
     val=false; 
     c=getContentPane(); 
     c.setLayout(new FlowLayout()); 

     send=new JButton[10]; 
     sc=new Scanner[10]; 
     ds=new DataOutputStream[10]; 
     s=new Socket[10]; 

     text=new JTextField(30); 
     text.setText("Enter your message"); 
     text.addFocusListener(this); 
     chat=new JTextArea(10,10); 
     chat.setEditable(false); 

     c.add(chat); 
     c.add(text); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(300,300); 

     setTitle("Server"); 

     r=new Thread[10]; 

     try{ 
      ss=new ServerSocket(999); 
     } 
     catch(IOException e){ 
      System.out.println("IOException"+e); 
     } 

     while(true) 
     { 
      try 
      { 
       s[n]=ss.accept(); 
       setVisible(true); 
       ds[n]=new DataOutputStream(s[n].getOutputStream()); 
       sc[n]=new Scanner(s[n].getInputStream()); 
       c.add(send[n]=new JButton("send"+n)); 
       send[n].addActionListener(this); 
       revalidate(); 
       repaint(); 
       (new Thread(this,"Receive"+(n++))).start(); 
      } 
      catch(IOException e) 
      { 
       System.out.println("IOException"+e); 
      } 
     } 
    } 

    public void actionPerformed(ActionEvent ae) 
    { 
     int i=Integer.parseInt(ae.getActionCommand().substring(4)); 

     msg=text.getText(); 
     try{ 
      if(!(msg.equals(null))) 
      { 
       ds[i].writeBytes(msg+"\n"); 
       text.setText("Enter your message");    
      } 
     } 
     catch(IOException e){ 
      System.out.println(e); 
     } 
    } 

    public void run() 
    { 
     int i; 

     while(true){  
      i=Integer.parseInt((Thread.currentThread().getName()).substring(7)); 
      msg1=sc[i].nextLine(); 
      chat.append(msg1+"\n"); 
     } 
    } 

    public void focusGained(FocusEvent fe) 
    { 
     text.setText(""); 
    } 

    public void focusLost(FocusEvent fe){} 

    public static void main(String s[]) 
    { 
     SingleFrameServer1 ms1=new SingleFrameServer1(); 
    } 
} 

が、これは、サーバーを実行してクライアントを実行してみてくださいcode.first。新しいcmdからクライアントを実行するたびに、これはサーバーフレームに新しいボタンを生成し、それと通信します。 私はこのプログラムを作ってテストしました。それは正しく動作します。

+0

これはありがたいですが、クライアントごとに異なるサーバーを作成していただきありがとうございます。私は1つのサーバーと複数のクライアントが必要です – Wingz2fire

+0

私もそれを持っています。 –

+0

yeaaa私はそれを必要としてください... – Wingz2fire

関連する問題