#include #include "tinystr.h"
#include "tinyxml.h"
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
#define PORT 8080
#define IP_ADDRESS "172.16.20.181"
#define LISTEN_PORT 8081
#define LISTEN_IP_ADDRESS "172.16.20.181"
//发送消息结构体
struct SendMsgStruct
{
SOCKET clientSocket;
string msg;
struct sockaddr_in ServerAddr;
};
//接收消息结构体
struct RecvMsgStruct
{
SOCKET clientSocket;
struct sockaddr_in ServerAddr;
};
//发送消息子线程
DWORD WINAPI SendThread(LPVOID lpParameter);
//接收消息子线程
DWORD WINAPI RecvThread(LPVOID lpParameter);
//去除字符串首尾空格
void trim(string &str);
//监听服务器的连接
DWORD WINAPI ListenServerThread(LPVOID lpParameter);
int _tmain(int argc, _TCHAR* argv[])
{
//HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
//SetConsoleTextAttribute(hConsole,FOREGROUND_GREEN);
WSADATA Ws;
SOCKET ClientSocket,ServerSocket;
struct sockaddr_in ServerAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;
HANDLE hSendThread = NULL;
HANDLE hRevcThread = NULL;
HANDLE hListenThread = NULL;
//The WSAStartup function initiates use of WS2_32.DLL by a process.
//初始化 Windows Socket
if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
{
cout
msgSend->msg = "你好,Msg From Client";
msgSend->ServerAddr = ServerAddr;
//传递一个struct
hSendThread = CreateThread(NULL, 0, SendThread, (LPVOID)msgSend, 0, NULL);
WaitForSingleObject(hSendThread, INFINITE);
if( hSendThread == NULL )
{
cout
msgRecv->ServerAddr = ServerAddr;
//传递一个struct指针参数
hRevcThread = CreateThread(NULL,0,RecvThread,(LPVOID)msgRecv,0,NULL);
WaitForSingleObject(hRevcThread, INFINITE);
if( hRevcThread == NULL )
{
cout
//WSADATA 结构体主要包含了系统所支持的Winsock版本信息
WSADATA Ws;
SOCKET ServerSocket, ClientSocket;
//TCP/IP 套接字指定套接字的地址
struct sockaddr_in LocalAddr, ServerAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;
//初始化Winsock2.2.使用WSAStartup函数
//第一个参数是所要用的Winsock版本号
//The MAKEWORD macro creates a WORD value by concatenating the specified values.
//第二个参数就是WSADATA 结构体的指针。如果初始化成功则返回0
//要注意任何WinsockAPI函数都必须在初始化后使用,包括错误检查函数
if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
{
cout
string SendMsg = myStruct->msg;
struct sockaddr_in ServerAddr = myStruct->ServerAddr;
while( true )
{
int flag = 0;
int bufSize = SendMsg.length();
char * buf = const_cast(SendMsg.c_str());
flag = send(ClientSocket, buf, bufSize, 0);
//判断当前时候存在可用连接,如果没有,再次连接
while( flag == -1 || flag == 0)
{
cout
struct sockaddr_in ServerAddr = recvStruct->ServerAddr;
char recvBuf[500]={"0"};
int byteRecv = recv(clientSocket, recvBuf, 500, 0);
int connectState;
while( byteRecv == 0 )
{
//连接断开,重连
cout<