2014-05-19 4 views
0

Моей программой сервераНевозможно общаться между клиентом и сервером

import java.net.*; 
import java.io.*; 
public class MultiServe implements Runnable 
{ 
    static ServerSocket ss; 
    static Socket s; 
    public void run() 
    { 
     String name=Thread.currentThread().getName(); 
     for(;;) 
     { 

      try 
      { 
       System.out.println("thread:"+name+"ready to accept"); 
       s=ss.accept(); 
       System.out.println("thread:"+name+" accepted"); 
       PrintStream ps=new PrintStream(s.getOutputStream()); 
       ps.println("Thread"+name+"contacted You"); 
       String sz,str1;    
       BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); 
       BufferedReader bk=new BufferedReader(new InputStreamReader(System.in)); 
       while(true) 
       { 
       while((sz=br.readLine())!=null) 
       { 
        System.out.println(sz); 
        str1=bk.readLine(); 
        ps.close(); 
        br.close(); 
        bk.close(); 
        s.close(); 
       } 
       } 

      }catch(Exception e){} 

     }  
    } 
    public static void main(String args[]) throws IOException 
    { 
     MultiServe ms=new MultiServe(); 
     ss=new ServerSocket(8080); 
     Thread t=new Thread(ms,"one"); 
     Thread t1=new Thread(ms,"two"); 
     t.start(); 
     t1.start(); 



    } 
} 

Моим клиентом программой

import java.net.*; 
import java.io.*; 
public class MultiClient 
{ 
    public static void main(String args[])throws Exception 
    { 
     Socket s=new Socket("localhost",8080); 
     BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); 
     String str,str1; 
     DataOutputStream ds=new DataOutputStream(s.getOutputStream()); 
     BufferedReader bk=new BufferedReader(new InputStreamReader(System.in)); 
     while(!(str=bk.readLine()).equals("exit")) 
     { 
      ds.writeBytes(str+"\n"); 
      str1=br.readLine(); 
      System.out.println(str1); 
     } 
     ds.close(); 
     bk.close(); 
     br.close(); 
     s.close(); 
    } 
} 

Новыми в программировании сокетов, но я могу подключиться, но не в состоянии общаться. Я не знаю, зашел ли он в тупик. Оба подключаются, но они не получают никаких сообщений.

+2

Предложение, не глотать исключений. если вы посмотрите на свой код, вы прочитаете строку, а затем сразу же закроете? –

ответ

0

Это из-за вашего блока catch try. В блоке try должна быть некоторая ошибка. В одном и том же соке есть два потока. когда кто-то подключается, оба пытаются его принять.

0

Ваш код неверен.

  1. Вы используете два потока в одном гнезде.
  2. writeBytes(String) метод DataOutputStream в вашем клиенте записывает строку как массив байт, где, как readLine() метод BufferedReader на сервере ожидает строку текста. Здесь вы можете использовать PrintStream на клиенте.

  3. Вы не можете закрыть поток на сервере после каждого чтения, если хотите продолжить чтение этого сокета.

  4. Если вы читаете строку на клиенте, вам также нужно что-то написать с сервера.

Попробуйте следующий код, чтобы достичь желаемого эффекта:

Сервер:

public class Server implements Runnable 
{ 
    static ServerSocket ss; 
    static Socket s; 
    public void run() 
    { 
     String name=Thread.currentThread().getName(); 
     for(;;) 
     { 

      try 
      { 
       System.out.println("thread:"+name+"ready to accept"); 
       s=ss.accept(); 
       System.out.println("thread:"+name+" accepted"); 
       PrintStream ps=new PrintStream(s.getOutputStream()); 
       ps.println("Thread"+name+"contacted You"); 
       String sz,str1;    
       BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); 
       BufferedReader bk=new BufferedReader(new InputStreamReader(System.in)); 

       while((sz=br.readLine())!=null) 
       { 
        System.out.print(sz+"\nYour Msg:"); 
        str1=bk.readLine(); 
        ps.println(str1); 

       } 
       ps.close(); 
       br.close(); 
       bk.close(); 
       s.close(); 

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

     }  
    } 
    public static void main(String args[]) throws IOException 
    { 
     Server ms=new Server(); 
     ss=new ServerSocket(8080); 
     Thread t=new Thread(ms,"one"); 
     //Thread t1=new Thread(ms,"two"); 
     t.start(); 
     //t1.start(); 



    } 
} 

Клиент:

public class Client 
{ 
    public static void main(String args[])throws Exception 
    { 
     Socket s=new Socket("localhost",8080); 
     BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); 
     String str,str1; 
     PrintStream ps = new PrintStream(s.getOutputStream()); 
     BufferedReader bk=new BufferedReader(new InputStreamReader(System.in)); 

     System.out.print(br.readLine()+"\nEnter:"); 
     while(!(str=bk.readLine()).equals("exit")) 
     { 
      ps.println(str); 

      str1=br.readLine(); 
      System.out.print(str1+"\nEnter:"); 
     } 
     ps.close(); 
     bk.close(); 
     br.close(); 
     s.close(); 
    } 
} 
Смежные вопросы