11-文件截取:服务器代码

文件截取:服务器代码

思路:和正常的TCP发送信息一样:创建一个TCPsocket用来监听是否有连接,然后创建分机TCP处理连接,接收信息到缓冲区。

#include<iostream>
#include<Windows.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
#define MAX_SIZE 1024

void ErrHanding(const char* errmsg) //代替
{
fputs(errmsg, stderr);
fputc('\n', stderr);
system("pause");
exit(1);
}

bool initsocket() //封装初始化网络库的函数
{
WORD wVersionRequested;
WSADATA wsadata;
int err;
wVersionRequested = MAKEWORD(2, 2);

err = WSAStartup(wVersionRequested, &wsadata);
if (err)
{
ErrHanding("WSAStartup err");
return false;
}

if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
{

WSACleanup();
ErrHanding("LOBYTE err");
return false;
}
return true;
}


int main()
{
char msg[MAX_SIZE] = { 0 };
if (!initsocket())
return 0;

SOCKET hServerSock = socket(PF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == hServerSock)
{
ErrHanding("socket err");
}

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(9999);

if (SOCKET_ERROR == bind(hServerSock, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)))
{
ErrHanding("bind err");
return -1;
}


if (SOCKET_ERROR == listen(hServerSock, 1))
{
ErrHanding("listen err");
return -1;
}

SOCKADDR_IN addrCli;
int len = sizeof(SOCKADDR);

char sendBuf[100] = { 0 };
char recvBuf[100] = { 0 };
SOCKET clisock;

while (1)
{
clisock = accept(hServerSock, (SOCKADDR*)&addrCli, &len);
if (SOCKET_ERROR == clisock)
{
ErrHanding("accept err");
}
memset(msg, 0, MAX_SIZE);
while (len = recv(clisock,msg,MAX_SIZE,0))
{
printf("Server msg: \n%s\n", msg);

}
closesocket(clisock);

}
closesocket(hServerSock);
WSACleanup();
return 0;

}