如何在C

时间:2015-07-13 18:40:19

标签: c sockets fopen winsock2

我遇到的很多例子都使用了fopen,但Visual Studio 2013并不像fopen那样建议使用fopen_s()。我在服务器端和客户端都有套接字连接,它能够通过套接字发送字符串等消息。但是send()和recv()使用char缓冲区,但fopen_s()使用FILE类型。我无法使这些功能协同工作,从服务器发送并接收到客户端。该程序运行时没有运行时错误,但没有任何内容写入output.txt。

发送部分服务器:

//Send data from log.txt
FILE *log;
char buff[2024];
errno_t err = fopen_s(&log, "C:\\Users\\amooc\\Desktop\\log.txt", "r+");
if (err <= 0){
    puts("can't open \n");
}
int bytes = send(new_socket, buff, sizeof(buff), 0);
if (bytes <= 0){
    fclose(log);
    puts("sent not successful");
}
else{
    printf("sent completed %d", err);
}
/*
message = "12345678ASDLJFA WJR OWJE FAWJ ;AMFJ FWERF9";
int ret = send(new_socket, message, strlen(message), 0);
ret = send(new_socket, message, strlen(message), 0);
if (ret == SOCKET_ERROR){
    printf("socket error %d\n", WSAGetLastError());
}
else{
    printf("sent\n");
}*/
printf("done\n");
closesocket(s);
WSACleanup();

return 0;

接收部分cilent:

//Receive data from log.txt and write data to output.txt
FILE *log;
char buff[2024];
errno_t err = fopen_s(&log, "C:\\Users\\amooc\\Desktop\\output.txt", "a");

int bytes = recv(s, buff, sizeof(buff), 0);
if (bytes <= 0){
    fclose(log);
    puts("receive not successful");
}
else{
    printf("receive completed %d", bytes);
}
puts(buff);
fclose(log);

printf("done\n");
closesocket(s);
WSACleanup();
return 0;

0 个答案:

没有答案