如何使用Java Socket作为客户端和Delphi Indy TCPServer作为服务器发送字符串

4

服务器 OnExecute 事件类似于

 try

  s := AContext.Connection.IOHandler.ReadLn(IndyTextEncoding_UTF8);
  ok:=true;

 except
  on e:exception do winapi.windows.beep(500,500);
end;

基本问题是从客户端发送到服务器。

3
提示:您的服务器代码不应在OnExecute方法中处理异常。Indy使用异常来检测客户端断开连接(以及其他情况)。 - mjn
谢谢您的回答,这只是为了测试。 - gpoto
1个回答

3

我通过在Java代码中在字符串结尾添加LF字符来解决了这个问题。

 String str = "Test\n";
    try {
        socket = new Socket("localhost", 13428);
        osw =new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
         osw.write( str, 0, str.length());
        osw.flush();


    } catch (IOException e) {
        System.err.print(e);
    } finally {
        socket.close();
    }

3
默认情况下,TIdIOHandler.ReadLn() 支持 CRLF 和 LF 作为行终止符,除非你在可选的 ATerminator 参数中指定了不同的值。 - Remy Lebeau
谢谢 @RemyLebeau ,从现在开始我明白了ATerminator的用途。 - gpoto
提示:您可以使用 Java 7 中的 try-with-resources 缩短代码。请注意,OutputStreamWriter 存在内存泄漏问题。 - mjn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接