AsyncSocket 可以连接到 java Socket 服务器但不能写入数据

Posted

技术标签:

【中文标题】AsyncSocket 可以连接到 java Socket 服务器但不能写入数据【英文标题】:AsyncSocket can connect to java Socket server but can't write data 【发布时间】:2011-04-18 16:17:58 【问题描述】:

每次我调用upLoad,Java控制台打印accept,但没有别的,数据传输了吗?

我把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!";

【问题讨论】:

我建议你打印出你的异常而不是忽略它们,尤其是当你有问题要解决时。正如布赖恩所说,这在 Java 方面似乎不是问题。 BTW:如果你发送的是 UTF-8,你应该尝试使用相同的编码来读取。 您的服务器一次只接受一个连接。这不应该影响您的测试。 其实我第一次看错了代码。他没有在控制台上看到任何其他内容是有充分理由的。 【参考方案1】:

好吧,您没有向控制台输出任何其他内容。您将其发送回客户端:

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

如果您 telnet 到您的服务器并输入一些内容,您会看到您恢复了您输入的内容。

我想你正在寻找:

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

【讨论】:

就是这样!服务器代码不是我写的,所以我想当然地认为它会打印我发送给它的内容。 我认为这只是一个简单的错字,因为客户端输出流被命名为“out”。我什至在第一次阅读时错过了它。

以上是关于AsyncSocket 可以连接到 java Socket 服务器但不能写入数据的主要内容,如果未能解决你的问题,请参考以下文章

asyncsocket ipad没有连接到服务器[关闭]

AsyncSocket 延迟发送数据

AsyncSocket 对我不起作用

AsyncSocket WHOIS 连接

AsyncSocket TLS HOWTO

异步套接字延迟