⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 01client.cpp

📁 演示win32的socket 通讯 八皇后的改进算法 并发Concurrency的JAVA实现 applet演示鼠标的点击时间和显示图象 手机J2ME的多线程演示
💻 CPP
字号:
/**客户控制台应用程序---Echo(回声服务)


**/

#include <afxwin.h>         // 使用了MFC的字符串类:CString
#include "winsock.h"
#pragma comment(lib, "wsock32")

#include "assert.h"
#include "iostream.h"

CString	    m_strServer;    //服务器IP地址
UINT	    m_nPort;        //服务器端口号
CString	    m_strUser;      //客户名
CString	    m_strPass;      //客户口令

SOCKET      m_hSocket;      //服务器进程套接字类
SOCKADDR_IN m_addr;         //套接字地址结构

void StartUp();             //初始化Winsock的函数:启动Winsock
void CleanUp();             //终止对Winsock DLL的使用,释放资源
void OnOK();                //建立TCP通信套接字并与服务器连接
void SendToServer();        //向服务器发送数据
void RecvFromServer();      //向服务器发送数据

//从str的头一个字符往后检查,直到字符'\0'(其值为0)为止,即返回字符串str字符'\0'前的长
int strlen(char str[]);

void main(){   

	m_strServer = "127.0.0.1";   //_T("127.0.0.1");
	m_nPort = 2350;
	m_strUser = "测试数据";//ware";
	m_strPass = "test";

	StartUp();   //初始化Winsock的函数:启动Winsock
   	char cc;
        do{
		OnOK();//建立通信套接字
		cout<<"已经与服务器连接成功,向服务器发送数据\n";
		SendToServer();//向服务器发送数据
        cout<<"发送成功,服务器返回数据:\n\n";
		RecvFromServer();//从服务器接收数据
		cout<<"\n本次通信完成;再来吗(y/n)\n";cin>>cc;
        }while (cc != 'n');	
	CleanUp();   //终止对Winsock DLL的使用,释放资源
}

//调用socket建立TCP通信套接字并与服务器连接
void OnOK() 
{
    //调用socket建立TCP通信套接字
	if(m_hSocket != NULL){
		closesocket(m_hSocket);
		m_hSocket = NULL;
	}
	if(m_hSocket == NULL){
		m_hSocket = socket(AF_INET, SOCK_STREAM,0);
		assert(m_hSocket != NULL);
	}

	//UpdateData();
    
	//给套接字地址结构赋值
	m_addr.sin_family = AF_INET;
	m_addr.sin_addr.S_un.S_addr = inet_addr(m_strServer.GetBuffer(0));
	m_addr.sin_port = htons(m_nPort);
	
	int ret = 0;// 
	int error = 0;    
	//用connect建立连接,连接成功,返回0,否则返回SOCKET_ERROR
	ret = connect(m_hSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr));
	if(ret == SOCKET_ERROR){//出错处理
		TRACE("Connect Error: %d \n", (error = WSAGetLastError()));
        //        cout<<"Connect Error!\n";//, (error = WSAGetLastError()));
		if(error == 10061)
		//	AfxMessageBox(_T("请确认服务器确实已经打开并工作在同样的端口!"));
                  cout<<"请确认服务器确实已经打开并工作在同样的端口!\n";
		return ;
	}
}

void SendToServer(){
	//
	CString str;
	str += m_strUser;
	str += m_strPass;
 	//发送数据,如成功,返回发送的字节数
 	int ret = send(m_hSocket, str, str.GetLength(), 0);
	if(ret != str.GetLength()){
		TRACE("Send data error: %d\n", WSAGetLastError());
        //        cout<<"Send data error: %d\n";//, WSAGetLastError());
		return ;
	}
}

void RecvFromServer(){	
	char buff[256];
	/** 接受数据recv函数的返回值:
		如无错误,返回接到的字节数(bytes received)
		如连接已关闭,返回0 
		要不然,返回出错处理值:SOCKET_ERROR 
	**/
	int ret = recv(m_hSocket, buff, 256, 0);
	if(ret == 0){
		TRACE("Recv data error: %d\n", WSAGetLastError());
        //        cout<<"Recv data error: %d\n";//, WSAGetLastError());
		return ;
	}
	buff[ret] = '\0';//ASCII值为0的字符:'\0'
	cout<<buff<<endl;//显示服务器送回数据
	//AfxMessageBox(buff);
}

//初始化Winsock的函数:启动Winsock
void StartUp()
{
	WSADATA wsaData;
	WORD version = MAKEWORD(2, 0); //
	//调用WSAStartup函数对Winsock DLL进行初始化,协商Winsock版本支//持,分配资源
	int ret = WSAStartup(version, &wsaData);
	if(ret != 0)cout<<"初始化错误!\n";
}

//应用程序关闭套接字后,终止对Winsock DLL的使用,释放资源
void CleanUp()
{
	if (WSACleanup() != 0){
		TRACE("UnInitilize Error:%d\n", WSAGetLastError());
        //        cout<<"UnInitilize Error:%d\n";//, WSAGetLastError());
	}
}

//从str的头一个字符往后检查,直到字符'\0'(其值为0)为止,即返回字符串str字符'\0'前的长
int strlen(char str[]){
	int i=0;
	while(str[i])i++;
	return i;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -