2011-04-18 39 views
1

每當我調用upLoad,Java控制檯打印接受,但沒有別的,數據傳輸?AsyncSocket可以連接到java套接字服務器但不能寫入數據

我將writedata調用更改爲didConnectToHost,現在客戶端說數據已被傳輸,但是如何在Java Server控制檯中顯示這些數據?

這是我的Java服務器代碼:

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

public class Server 
{ 
    private ServerSocket ss; 
    private Socket socket; 
    private BufferedReader in; 
    private PrintWriter out; 

    public Server() 
    { 
     try 
     { 
      ss = new ServerSocket(8080); 

      while (true) 
      { 
       socket = ss.accept(); 
       System.out.println("accepted"); 
       in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
       out = new PrintWriter(socket.getOutputStream(),true); 

       String line = in.readLine(); 
       out.println("you input is :" + line); 
       out.close(); 
       in.close(); 
       socket.close(); 
      } 
     } 
     catch (IOException e) 
     {} 
    } 

    public static void main(String[] args) 
    { 
     new Server(); 
    } 
} 

這是我的iPhone客戶端代碼:

-(IBAction)upLoad{ 
    NSError* error; 
    NSString* hostIP = @"127.0.0.1"; 
    UInt16 port = 8080; 
    [aSocket connectToHost:hostIP onPort:port withTimeout:-1 error:&error]; 

    NSData *dataToUpload = [@"testxyz" dataUsingEncoding:NSUTF8StringEncoding]; 
} 

#pragma mark - 
#pragma mark socketdelegate 
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port 
{ 
    connectionStatus.text = @"connected to server!"; 
    NSData *dataToUpload = [@"testxyz" dataUsingEncoding:NSUTF8StringEncoding]; 
    [sock writeData:dataToUpload withTimeout:-1 tag:0]; 
} 

- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag 
{ 
    connectionStatus.text = @"write complete!"; 
} 
+0

我建議你打印出異常,而不是忽略它們,尤其當你有問題要解決。正如Brian所說,它在Java方面看起來不是問題。順便說一句:如果你發送UTF-8,你應該嘗試使用相同的編碼來閱讀。 – 2011-04-18 16:27:25

+0

您的服務器一次只能接受一個連接。這不應該影響你的測試。 – 2011-04-18 16:28:50

+0

我其實第一次誤解了代碼。有一個非常好的理由,他沒有看到控制檯上的其他東西。 – 2011-04-18 16:30:37

回答

0

嘛,你不輸出任何東西到控制檯。您將其發送回客戶端:

out.println("you input is :" + line); 

如果您telnet到您的服務器並鍵入內容,則會看到您找回您輸入的內容。

我認爲你正在尋找:

System.out.println("you input is :" + line); 
+0

這就是它!服務器代碼不是由我編寫的,所以我認爲它會打印我發送給它的內容。 – CarmeloS 2011-04-18 16:40:33

+0

我認爲這只是一個簡單的錯字,因爲客戶端輸出流被命名爲「out」。我第一次讀它時甚至錯過了它。 – 2011-04-18 16:41:40

相關問題