我正在实施发送和接收客户端/服务器文件。
实现:C中的客户端和Java中的服务器。
正在发送的部分C代码:
long count;
FILE *file;
char *file_data;
file=fopen("test.txt","rb");
fseek (file , 0 , SEEK_END);
count = ftell (file);
rewind (file);
file_data=(char*)malloc(sizeof(char)*count);
fread(file_data,1,count+1,file);
fclose(file);
if ((numbytes = send(sockfd, file_data, strlen(file_data)+1 , 0)) == -1)
{
perror("client: send");
exit(1);
}
接收的部分Java代码:
public String receiveFile()
{
String fileName="";
try
{
int bytesRead;
InputStream in = clientSocket.getInputStream();
DataInputStream clientData = new DataInputStream(in);
fileName=clientData.readUTF();
}
}
使用readUTF()函数后,服务器挂起或处于无限循环中并且不再继续。我用readLine()尝试过BufferedReader。有一个错误“找不到适合BufferedReader(InputStream)和readLine()的构造函数给出警告。 除了BufferedReader之外的任何其他选择?
答案 0 :(得分:1)
readUTF()
读取writeUTF()
所写的格式。您没有发送它,因此服务器无法读取它。使用read(byte[]),
或readFully(),
或new BufferedReader(newInputStreamReader(in));
如果您使用readLine()
,则需要发送换行符。在任何一种情况下,您都不需要发送尾随空值。