VS.net 2005
Win32控制台程序 Test_CSocket
Test_Socket.cpp////////////////////////////////////////////////
// Test_Socket.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "Test_Socket.h"#include "afxsock.h"
#include <vector>#ifdef _DEBUG
#define new DEBUG_NEW
#endif#define SERVER_IP "192.168.58.107"
#define PORT 365181// 唯一的应用程序对象CWinApp theApp;using namespace std;// 服务器线程函数
// 服务器端接收客户端消息的线程函数
UINT Server2ClientProc( LPVOID lParam )
{
char buf[1025] = { 0 };
int  bufLen = 1024;
int  recvLen;
int  flag;
CSocket *recvSocket = ( CSocket* )lParam; printf( "服务器消息: 连接成功建立....\n" );
if( recvSocket != NULL)
{
while( true )
{
flag = 0;
recvLen = recvSocket->Receive( buf , bufLen );
while( recvLen > 0 )
{
if( flag == 0 )
{
printf( "服务器消息: 收到客户端发来的消息\n" );
}
printf( "%s" , buf );
recvLen = recvSocket->Receive( buf , bufLen );
}
}
}
delete recvSocket;
printf( "服务器消息: 断开了一个连接!!!\n" );
return 0;
}// 服务器线程函数
// 对端口进行监听,接收来自客户端的连接请求
UINT ServerProc( LPVOID lParam )
{
CSocket svrSocket;
CSocketAddr saServer;
CSocket *recvSocket;
vector< CSocket* >socketList;
bool flag; svrSocket.Create( PORT , SOCK_STREAM );
// saServer.FindINET4Addr( _T(SERVER_IP) , PORT );
svrSocket.Bind( PORT , _T(SERVER_IP) ); if( svrSocket.Listen() )
{
printf( "服务器消息: 服务器正常启动,开始侦听用户连接......\n" );
} flag = true;
while( true )
{
if( flag )
{
recvSocket = new CSocket();
flag = false;
} if( svrSocket.Accept( *recvSocket ) )
{
printf( "服务器消息: 收到客户端的连接请求.....\n" );
flag = true;
::AfxBeginThread( Server2ClientProc , recvSocket , THREAD_PRIORITY_NORMAL );
}
} return 0;
}// 客户端线程函数
UINT ClientProc( LPVOID lParam )
{
static int seed;
srand( seed );
seed = rand(); char buf[1024];
int  bufLen = 1024; CSocket sendSocket;
sendSocket.Create();

printf( "客户端消息: 正在建立连接......\n" );
Sleep( 20 );
if( sendSocket.Connect( _T(SERVER_IP) , PORT ) )
{
//while( true )
{
Sleep( rand() * 100 );
sprintf( buf , "hello,world. %d\n" , rand() );
// sendSocket.Send( buf , bufLen );
}
}
else
{
printf( "客户端消息: 连接服务器失败。\n" );
}
return 0;
}int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0; // 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
if( AfxSocketInit(NULL) )
{
AfxBeginThread( ServerProc , (LPVOID)NULL , THREAD_PRIORITY_NORMAL );

Sleep( 500 );
AfxBeginThread( ClientProc , (LPVOID)NULL , THREAD_PRIORITY_NORMAL );
//Sleep( 500 );
//AfxBeginThread( ClientProc , (LPVOID)NULL , THREAD_PRIORITY_NORMAL );
}
else
{
printf( "服务器消息: Socket初始化失败......\n" );
} } getchar();
return nRetCode;
}