socket文件接收

// Server.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include "windows.h"
#include <WinSock.h>
#include <iostream>


#pragma comment(lib, "ws2_32.lib")


using namespace std;
#define PORT 3574
#define IP_ADDRESS "10.3.15.11"


DWORD WINAPI ClientThread(LPVOID lpParameter)
{
SOCKET ClientSocket = (SOCKET)lpParameter;
int length = 0;
char buf[1024];
FILE * fDes = fopen("F:/3.MP3", "wb");
while((length = recv(ClientSocket, buf, sizeof(buf), 0))>0){   
if ( length == 0 || length == SOCKET_ERROR){
cout << "客户端退出!" << endl ;
break;
}
fwrite(buf, 1024, length, fDes);
printf("接收了%d字节!\n",length);
memset(buf, 0, 1025);
}
printf("文件传输成功!\n");
return 0;
}




int main(int argc, char * argv[])
{
WSADATA ws;
SOCKET ServerSocket, ClientSocket;
struct sockaddr_in LocalAddr, ClientAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;


//初始化Windows端口
if (WSAStartup(MAKEWORD(2,2), &ws) != 0 )
{
cout << "初始化Windows Socket失败::" << GetLastError() << endl;
return -1;
}


//创建端口
ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ServerSocket == INVALID_SOCKET)
{
cout << "建立socket端口失败::" << GetLastError() << endl;
return -1;
}


LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
LocalAddr.sin_port = htons(PORT);
memset(LocalAddr.sin_zero, 0x00, 8);


//绑定端口
Ret = bind(ServerSocket, (struct sockaddr * )&LocalAddr, sizeof(LocalAddr));
if ( Ret != 0 )
{
cout << "绑定端口失败::" << GetLastError() << endl;
return -1;
}


Ret = listen(ServerSocket, 10);
if ( Ret !=0 )
{
cout << "监听端口失败::" << GetLastError() << endl;
return -1;
}

cout << "服务端已启动" << endl;


while(true)
{
AddrLen = sizeof(ClientAddr);
ClientSocket = accept(ServerSocket, (struct sockaddr *)&ClientAddr, &AddrLen);
if ( ClientSocket == INVALID_SOCKET)
{
cout << "Accept失败::" << GetLastError() << endl;
break;
}
cout << "Accept成功::"<< endl;


cout << "客户端连接::" << inet_ntoa(ClientAddr.sin_addr) << ":" << ClientAddr.sin_port << endl;
hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)ClientSocket, 0, NULL);
if ( hThread == NULL )
{
cout << "建立线程失败!" << endl;
break;
}


CloseHandle(hThread);
}


closesocket(ServerSocket);
closesocket(ClientSocket);
WSACleanup();


return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值