以下是一个在 Windows 7 下使用 Winsock 库编写的发送消息和文件的 C 语言程序示例:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib") // 链接 Winsock 库
#define PORT 8080
#define BUFFER_SIZE 1024
void sendMessage(SOCKET sockfd, const char *message) {
send(sockfd, message, strlen(message), 0);
}
void sendFile(SOCKET sockfd, const char *fileName) {
FILE *file = fopen(fileName, "rb");
if (file == NULL) {
printf("Error opening file\n");
return;
}
char buffer[BUFFER_SIZE];
size_t bytesRead;
while ((bytesRead = fread(buffer, 1, BUFFER_SIZE, file)) > 0) {
send(sockfd, buffer, bytesRead, 0);
}
fclose(file);
}
int main() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData)!= 0) {
printf("WSAStartup failed\n");
return 1;
}
SOCKET sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == INVALID_SOCKET) {
printf("Socket creation failed: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 请根据实际情况修改接收方地址
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == SOCKET_ERROR) {
printf("Connection failed: %d\n", WSAGetLastError());
closesocket(sockfd);
WSACleanup();
return 1;
}
char message[] = "Hello from sender!";
sendMessage(sockfd, message);
char fileName[] = "example.txt";
sendFile(sockfd, fileName);
closesocket(sockfd);
WSACleanup();
return 0;
}
同样,请注意修改接收方的地址为实际的目标地址,并确保在运行代码前,已正确配置开发环境以支持 Winsock 库。