18,356
社区成员
发帖
与我相关
我的任务
分享
#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#define SERVER_PORT 6000
#define LENGTH_OF_LISTEN_QUEUE 20
#define BUFFER_SIZE 10
struct Data //数据包
{
int length;
char receivemessage[2000]; //内容信息
int fin;
};
int main() // (int argc, char* argv[])
{
struct sockaddr_in server_addr;
int server_socket;
int opt = 1;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port = htons(SERVER_PORT);
// 创建一个Socket
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket < 0)
{
printf("Create Socket Failed!\n");
exit(1);
}
// bind a socket
setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
if(bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)))
{
printf("Server Bind Port: %d Failed!\n", SERVER_PORT);
exit(1);
}
// 监听Socket
if (listen(server_socket, 5))
{
printf("Server Listen Failed!\n");
exit(1);
}
struct sockaddr_in client_addr;
int client_socket;
socklen_t length;
// 连接客户端Socket
length = sizeof(client_addr);
client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &length);
if (client_socket < 0)
{
printf("Server Accept Failed!\n");
}
FILE * fp;
if (!(fp = fopen("abc.bmp", "wb+")))
{
printf("open abc.bmp error");
exit(0);
}
Data data;
memset(&data, 0, sizeof(Data));
// 从客户端接收数据
while(!data.fin)
{
memset(data.receivemessage, 0, sizeof(data.receivemessage));
length = recv(client_socket, (char *)&data, sizeof(Data), 0);
printf("size %d fin %d length %d\n",length,(int)data.fin,(int)data.length);
if (length < 0)
{
printf("Server Recieve Data Failed!\n");
break;
}
fwrite(data.receivemessage, data.length, 1, fp);
}
close(client_socket);
close(server_socket);
return 0;
}
#include <stdio.h>
#include <Windows.h>
#pragma comment(lib, "ws2_32.lib")
#define Port 6000
#define IP_ADDRESS "10.14.105.88"
typedef struct Data
{
int length;
char sendMessage[2000];
int fin;
};
int main(int argc, char* argv[])
{
Data data;
WSADATA s;
SOCKET ClientSocket;
struct sockaddr_in ClientAddr;
int ret = 0;
char SendBuffer[MAX_PATH];
if (WSAStartup(MAKEWORD(2, 2), &s) != 0)
{
printf("Init Windows Socket Failed! Error: %d\n", GetLastError());
getchar();
return -1;
}
ClientSocket = socket(AF_INET,
SOCK_STREAM,
IPPROTO_TCP);
if (ClientSocket == INVALID_SOCKET)
{
printf("Create Socket Failed! Error: %d\n", GetLastError());
getchar();
return -1;
}
ClientAddr.sin_family = AF_INET;
ClientAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
ClientAddr.sin_port = htons(Port);
memset(ClientAddr.sin_zero, 0X00, 8);
FILE* fp;
errno_t er = fopen_s(&fp, "./40000.bmp", "rb+");
fseek(fp, 0, SEEK_END);
int end = ftell(fp);
fseek(fp, 0, 0);
// 连接Socket
ret = connect(ClientSocket, (struct sockaddr*)&ClientAddr,sizeof(ClientAddr));
if (ret == SOCKET_ERROR)
{
printf("Socket Connect Failed! Error:%d\n", GetLastError());
getchar();
return -1;
}
else
{
printf("Socket Connect Succeed!");
}
while (end > 0)
{
printf("end %d \n", end);
memset(data.sendMessage, 0, sizeof(data.sendMessage));
fread(data.sendMessage, 1024, 1, fp);
if (end >= 1024)
{
data.fin = 0;
data.length = 1024;
}
else
{
data.fin = 1;
data.length = end;
}
ret = send(ClientSocket, (char*)&data, sizeof(Data), 0);
if (ret == SOCKET_ERROR)
{
printf("end %d \n", end);
printf("send error:%d\n", WSAGetLastError());
//printf("send() failed!\n");
break;
}
else
{
end -= 1024;
}
}
// 关闭socket
closesocket(ClientSocket);
WSACleanup();
getchar();
return 0;
}