2016-02-25 239 views
0

我試圖在客戶端和服務器之間實現TCP發送和接收程序。他們交換信息。不斷使用循環。客戶端首先發送消息。沒有循環,程序工作,但循環,它沒有。下面是節目:套接字編程客戶端服務器java

public static void main(String[] args) { 
    // SERVER 

    try 
    { 
     ServerSocket s = new ServerSocket(11); 
     Socket s1 = null; 
     int i=0; 
     while (true) 
     { 
      s1 = s.accept(); 
      BufferedReader b = new BufferedReader(new InputStreamReader(s1.getInputStream())); 
      PrintWriter p = new PrintWriter(new OutputStreamWriter(s1.getOutputStream())); 
      String m; 
      while ((m=b.readLine())!=null) 
      { 
       i++; 
       System.out.print(m); 
       p.print("reply"+i); 
      } 
     } 

    }catch(IOException e){} 

} 

public static void main(String[] args) throws IOException { 
    // CLIENT 

    Socket s = new Socket("192.168.100.3",11); 
    int i = 0; 

    PrintWriter p = new PrintWriter(new OutputStreamWriter(s.getOutputStream())); 

    p.print("msg"+i); 
    BufferedReader b = new BufferedReader(new InputStreamReader(s.getInputStream())); 

    while (true){ 
     PrintWriter p1 = new PrintWriter(new OutputStreamWriter(s.getOutputStream())); 

     BufferedReader b1 = new BufferedReader(new InputStreamReader(s.getInputStream())); 

     String m; 
     while((m=b1.readLine())!=null) 
     {    
      System.out.print(m); 
      p1.print("msg"+i); 
     } 
     i++; 
     p1.flush(); 
    } 
} 
+1

您是否在p.print(「reply」+ i)後嘗試刷新; ? – andrucz

+0

nope,我會嘗試一下,讓你知道 – ali

+0

我認爲問題是關閉套接字..在while(true)循環中每次迭代之後關閉套接字,這就是爲什麼msg不被髮送和接收。如果我在循環後關閉套接字,eclipse給我一個錯誤 – ali

回答

0

當您使用readLine()它讀取多達行的末尾。

但是,print(x)不寫入換行符。

如果您編寫並刷新println(x),您的文本末尾會有一個新行可供閱讀。

+0

問題是,控制流只是沒有進入循環:while(br.readline!= null)的服務器..也許問題是與客戶端 – ali

0

在同一套接字上循環接受是否合理?如在:

Socket s1 = null; 
while (true) { 
    s1 = s.accept(); 

此外,我不認爲它會在端口11上工作,因爲你有你的代碼在那裏。嘗試1024以上的端口號,那些沒有特權。

+0

是的,此套接字可以是不同的套接字,具體取決於要連接到服務器的不同客戶端。 – ali

0

此代碼將只是死鎖。兩端都在閱讀。有人需要先發送一些信息,確保它是行終止的,以便對方的readLine()呼叫將返回。

+0

是的,當服務器使用s.accept()和I接受連接時,客戶端首先發送消息認爲消息(消息+我)行終止... – ali

相關問題