//服务器代码
/ Sever.cpp : Defines the entry point for the console application.
//
#include <WinSock2.h> //包含Socket 2版本的头文件;
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "WS2_32.lib") //调用网络动态库!
int _tmain(int argc, _TCHAR* argv[])
{
WORD sockVersion = 0x0002; //定义版本号;
//sockVersion = MAKEWORD(2, 0);
WSADATA wsaData;
::WSAStartup(sockVersion, &wsaData); //获取DLL动态库的版本;
SOCKET s = 0;
s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //创建套接字;
if (s == INVALID_SOCKET)
{
printf("Failed Socket()!/n");
WSACleanup();
return 0;
}
//
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8888);
sin.sin_addr.S_un.S_addr = INADDR_ANY; //定义服务网络端口地址;
if (::bind(s, (LPSOCKADDR)&sin, sizeof(sin))) //绑定套接字到服务地址;
{
printf("Failed bind()!/n");
WSACleanup();
return 0;
}
if(listen(s, 5)) //监听网络端口 ,5个连接;
{
printf("Failed listen()!/n");
WSACleanup();
return 0;
}
//
sockaddr_in remoteAddr; //远程客户端地址;
int nAddrLen = sizeof(remoteAddr);
SOCKET client;
char szText[] ="ServerDemo!/r/n";
while (TRUE)
{
client = accept(s, (LPSOCKADDR)&remoteAddr, &nAddrLen); //接受远程客户端连接, 并产生和
//该客户端的连接的套接口;
if (client == INVALID_SOCKET)
{
printf("Failed accept()!/n");
continue;
}
printf("接收一个连接:%s/r/n", inet_ntoa(remoteAddr.sin_addr)); // 打印连接的客户端IP
send(client, szText, strlen(szText),0 ); //给客户端发送特点字符;
char buff[256];
int nRecv = recv(client, buff, 256, 0); //接受客户端发送过来的数据;
if (nRecv > 0)
{
buff[nRecv] = '/0';
printf("接收到客户端回应:%s/n", buff);
}
closesocket(client); //用完关闭套接字
}
closesocket(s); //关闭服务器端套接字;
WSACleanup(); //清除WinSock函数;
return 0;
}