Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
Server.cpp
Package: winsock.rar [view]
Upload User: whzytd4
Upload Date: 2022-08-01
Package Size: 7346k
Code Size: 4k
Category:
WinSock-NDIS
Development Platform:
Visual C++
- // Server.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream.h>
- #include "winsock2.h"
- #pragma comment(lib, "WS2_32.lib")
- #define SERVER_DLL_ERROR 1
- #define MAX_NUM_BUF 128
- #define SERVER_API_ERROR 2 //调用Windows sockets API失败
- #define SERVERPORT 5500
- SOCKET sServer;
- SOCKET sClient;
- char bufRecv[MAX_NUM_BUF];
- char bufSend[MAX_NUM_BUF];
- bool bConning;
- WORD wVersionRequested;
- int retVal;
- WSADATA wsd;
- void InitMember(void);
- void ShowSocketMsg(char* str);
- int HandleSocketError(char *str);
- bool RecvLine(SOCKET s, char* buf);
- bool SendLine(SOCKET s, char* str);
- int ExitClient(int Exit);
- void InitMember(void)
- {
- memset(bufRecv, 0, MAX_NUM_BUF);
- memset(bufSend, 0, MAX_NUM_BUF);
- sServer = INVALID_SOCKET;
- sClient = INVALID_SOCKET;
- bConning = false;
- }
- void ShowSocketMsg(char* str)
- {
- MessageBox(NULL, str, "SERVER ERROR", MB_OK);
- }
- int HandleSocketError(char *str)
- {
- ShowSocketMsg(str);
- WSACleanup();
- return SERVER_API_ERROR;
- }
- bool RecvLine(SOCKET s, char* buf)
- {
- bool retVal = TRUE;
- BOOL bLineEnd = false;
- int nReadLen = 0;
- int nDataLen = 0;
- while(!bLineEnd && bConning)
- {
- nReadLen = recv(sServer, buf+nDataLen, 1, 0);
- if(SOCKET_ERROR == nReadLen)
- {
- retVal = false;
- break;
- }
- if(nReadLen == 0)
- {
- retVal = false;
- break;
- }
- if('n' == *(buf+nDataLen))
- {
- bLineEnd = true;
- }
- else
- {
- nDataLen += nReadLen;
- }
- }
- return retVal;
- }
- bool SendLine(SOCKET s, char* str)
- {
- int retVal;
- retVal = send(s, str, strlen(str), 0);
- if( retVal == INVALID_SOCKET)
- {
- return false;
- }
- return true;
- }
- int ExitClient(int nExit)
- {
- closesocket(sServer);
- closesocket(sClient);
- WSACleanup();
- return nExit;
- }
- int main(int argc, char* argv[])
- {
- InitMember();
- wVersionRequested = MAKEWORD(1,1);
- retVal = WSAStartup(wVersionRequested, &wsd);
- if(retVal != 0)
- {
- ShowSocketMsg("can not find a usable Windows Sockets dll!");
- return SERVER_DLL_ERROR;
- }
- if(LOBYTE(wsd.wVersion) != 1 || HIBYTE(wsd.wVersion) != 1)
- {
- ShowSocketMsg("can not find a usable windows sockets dll!");
- WSACleanup();
- return SERVER_DLL_ERROR;
- }
- sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(sServer == INVALID_SOCKET)
- {
- return HandleSocketError("Failed socket()");
- }
- SOCKADDR_IN addrServ;
- addrServ.sin_family = AF_INET;
- addrServ.sin_addr.S_un.S_addr = INADDR_ANY;
- addrServ.sin_port = htons(SERVERPORT);
- retVal = bind(sServer, (SOCKADDR *)&addrServ, sizeof(addrServ));
- if(retVal == SOCKET_ERROR)
- {
- closesocket(sServer);
- return HandleSocketError("Failed bind()");
- }
- retVal = listen(sServer, 3);
- if(retVal == SOCKET_ERROR)
- {
- closesocket(sServer);
- return HandleSocketError("Failed listen()");
- }
- cout << "Server succeeded!" <<endl;
- cout << "Waitting for new clients..." <<endl;
- sockaddr_in addrClient;
- int addrClientLen = sizeof(addrClient);
- sClient = accept(sServer, (SOCKADDR *)&addrClient, &addrClientLen);
- if(sClient == INVALID_SOCKET)
- {
- closesocket(sServer);
- return HandleSocketError("Failed accept()!");
- }
- else
- {
- bConning = true;
- }
- char *pClientIp = inet_ntoa(addrClient.sin_addr);
- u_short clientPort = ntohs(addrClient.sin_port);
- cout<<"accept a new client"<<endl;
- cout<<"IP:"<<pClientIp<<endl;
- cout<<"Port:"<<clientPort<<endl;
- //接收客户端数据
- if (!RecvLine(sClient, bufRecv))
- {
- return ExitClient(SERVER_API_ERROR);//退出
- }
- //显示客户端数据
- cout << bufRecv<<endl;
- strcpy(bufSend, "Heallo Client!n");
- if(!SendLine(sClient, bufSend))
- {
- return ExitClient(SERVER_API_ERROR);
- }
- //显示退出信息
- cout << "Server exiting..." << endl;
- //退出
- return ExitClient(0);
- }