Window TCP Server
来源:互联网 发布:淘宝网六个月宝宝衣服 编辑:程序博客网 时间:2024/05/18 03:56
#include "stdafx.h"
#include <winsock2.h>
#include <iostream>
#pragma comment( lib, "ws2_32.lib" )
const static int _MAX_BUF_SIZE = 256;
using namespace std;
int _tmain( int argc , _TCHAR* argv[])
{
// 初始化Winsock 2.2
WSADATA wsaData ;
if( WSAStartup ( MAKEWORD( 2, 2 ), & wsaData ) != 0 )
{
cout<<"WSAStartup 无法初始化 !" <<endl ;
return -1;
}
// 通过WinSock 实现网络通信
SOCKET sServer ;
// 创建用于监听的Socket
sServer = socket ( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( INVALID_SOCKET == sServer )
{
cout<<"Socket Failed !" <<endl;
WSACleanup();
return -1;
}
// 设置服务器Socket 地址
SOCKADDR_IN addrServ ;
addrServ.sin_family = AF_INET;
addrServ.sin_port = htons( 9990 ); // 服务器端口号
addrServ.sin_addr .S_un. S_addr = htonl ( INADDR_ANY );
// 绑定
int retVal ;
retVal = bind ( sServer, ( const struct sockaddr *)&addrServ , sizeof( SOCKADDR_IN ) );
if( SOCKET_ERROR == retVal )
{
cout<<"bind failed !" <<endl;
closesocket( sServer );
WSACleanup();
return -1;
}
// 监听
retVal = listen ( sServer, 1 );
if( SOCKET_ERROR == retVal )
{
cout<<"listen failed !" <<endl;
closesocket( sServer );
WSACleanup();
return -1;
}
// 接受来自客户端的请求
SOCKET sClient ;
cout<<"TCP Server Start... ..." <<endl;
sockaddr_in addrClient ;
int addrClientlen = sizeof( addrClient );
sClient = accept ( sServer, ( sockaddr FAR *)&addrClient , &addrClientlen );
if( INVALID_SOCKET == sClient )
{
cout<<"accept failed " <<endl;
closesocket( sServer );
WSACleanup();
return -1;
}
// 循环接受客户端数据,直到客户端发送 quit 命令
char buf [_MAX_BUF_SIZE];
while( true )
{
ZeroMemory( buf , _MAX_BUF_SIZE );
retVal = recv ( sClient, buf, BUFSIZ , 0 );
if( SOCKET_ERROR == retVal )
{
cout<<"recv failed !" <<endl;
closesocket( sServer );
closesocket( sClient );
WSACleanup();
return -1;
}
// 获取系统的时间
SYSTEMTIME st ;
GetLocalTime(&st );
char sDateTime [30];
sprintf( sDateTime , "%4d-%2d-%2d %2d:%2d:%2d", st.wYear , st. wMonth, st .wDay, st.wHour , st. wMinute, st.wSecond );
cout<<sDateTime <<" , Recv From Client ["<< inet_ntoa(addrClient .sin_addr)<< ":"<<addrClient .sin_port<< "]: "<<buf <<endl;
if( strcmp ( buf, "quit" ) == 0 )
{
retVal = send ( sClient, "quit", strlen ("quit"), 0 );
break;
}
else
{
char msg [_MAX_BUF_SIZE];
sprintf( msg , "Message received - %s ", buf );
retVal = send ( sClient, msg, strlen (msg), 0 );
if( SOCKET_ERROR == retVal )
{
cout<<"send failed!" <<endl;
closesocket( sServer );
closesocket( sClient );
WSACleanup();
return -1;
}
}
}
// 最后做一些清理工作
closesocket( sServer );
closesocket( sClient );
WSACleanup();
system("pause" );
return 0;
}
0 0
- Window TCP Server
- TCP server
- TCP Server
- tcp-server
- TCP--server
- TCP's window
- 关于 TCP window size
- Window 2003 TCP
- TCP WINDOW 详解
- 什么是TCP Window
- window通信协议TCP/IP
- TCP window Full
- TCP sliding window
- TCP 缓存区 window
- window media Server
- msn for window server
- Symbian中的WINDOW SERVER
- ping window server 2008
- De-mystifying Good Research and Good Papers
- EEPROM 相关资料整理汇总
- Microsoft Dynamics AX 2012
- <转载>设置Eclipse、MyEclipse默认workspace路径
- 使用ssh正向连接、反向连接、做socks代理的方法
- Window TCP Server
- ogre与cegui结合之显示中文
- spring3 MVC深入研究
- Windows TCP Client
- 双系统删除ubuntu
- IOS UITableView表视图和导航控制器的交互使用
- USB规范浏览--设备和主机规范
- window 下vs 配置lua 环境 c/c++与lua交互
- Working Practice-必要的时候,请求协助