Java 서버에서 C 클라이언트로 텍스트 파일을 보내려고합니다. 코드를 실행 한 후에 텍스트 파일을 성공적으로 받았지만 텍스트 파일에 임의의 데이터가 삽입되어 있음을 알았습니다.Java 서버에서 C 클라이언트로 텍스트 파일 보내기
파일을 전송하기위한 서버 코드입니다.
public void sendFile(Socket socket, String file) throws IOException
{
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[256];
while (fis.read(buffer) > 0) {
dos.write(buffer);
}
fis.close();
dos.close();
}
그리고이 파일을 수신하기위한 클라이언트 코드입니다.
int recv_file(int sock, char* file_name)
{
char send_str [MAX_SEND_BUF];
int fp;
int sent_bytes, rcvd_bytes, rcvd_file_size;
int recv_count;
unsigned int recv_str[MAX_RECV_BUF];
size_t send_strlen;
send_strlen = strlen(send_str);
if ((fp = open(file_name, O_WRONLY|O_CREAT, 0644)) < 0)
{
perror("error creating file");
return -1;
}
recv_count = 0;
rcvd_file_size = 0;
while ((rcvd_bytes = recv(sock, recv_str, MAX_RECV_BUF/*256*/, 0)) > 0)
{
recv_count++;
rcvd_file_size += rcvd_bytes;
if (write(fp, recv_str, rcvd_bytes) < 0)
{
perror("error writing to file");
return -1;
}
printf("%dThe data received is %u\n", ++count, recv_str);
}
close(fp);
printf("Client Received: %d bytes in %d recv(s)\n", rcvd_file_size, recv_count);
return rcvd_file_size;
}
그리고 이것은 클라이언트 측에서 수신 한 텍스트 파일입니다. Received text file
이 횡설수설이 텍스트 파일에 추가되었는데이 문제를 어떻게 해결합니까?
Java에서는 읽고 쓰는 것 이상을 쓰는 것 같습니다. Java에서 읽은 데이터의 양을 확인하고 해당 부분 만 DOS에 기록하십시오. –
'DataOutputStream' 필요/원하지 않아요! 소켓의 일반 출력 스트림을 사용하십시오! – JimmyB
@JimmyB 그가'DataOutputStream' 또는 소켓의 출력 스트림을 사용하는지 여부는 아무런 차이가 없습니다. – EJP