我有简单的C服务器和Java客户端.我从服务器到客户端逐行发送文本文件:
do {
send(sockfd, line, strlen(line), 0);
printf("%s\n", line);
} while ((fgets(line, 100, fp)) != NULL);
Run Code Online (Sandbox Code Playgroud)
并在Java客户端中读取它:
Client.getCl().getInputStream().read(inmsg);
do{
decoded = new String(inmsg, "UTF-8");
System.out.println(decoded);
}while(Client.getCl().getInputStream().read(inmsg) > 0);
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道如何从服务器向客户端发送"读取结束".客户端在上次读取时冻结.我知道,read()当没有任何东西需要读取时,methode 返回带有接收字节数的整数,当缓冲区长度为零时,返回0.返回-1到客户端的唯一解决方案是关闭服务器端的套接字,但我不能使用它.我也尝试过:
1)在发送方法结束时发送0长度告诉客户端,长度为零:
send(sockfd, NULL, NULL, 0);
Run Code Online (Sandbox Code Playgroud)
2)定义标志并发送:
#define MSG_FIN 0x200
#define MSG_EOR 0x0080
Run Code Online (Sandbox Code Playgroud)
并再次使用两个标志:
send(sockfd, NULL, NULL, MSG_FIN);
send(sockfd, NULL, NULL, MSG_EOR);
Run Code Online (Sandbox Code Playgroud)
任何人请帮助我在这里做错了什么?谢谢