【C++】Socket连接指定IP的服务端demo

发布于 2016-02-23  3922 次阅读


今天,第一次接触了MFC下的socket编程,其实哀差闷一直对网络编程非常感兴趣的,但是由于我自己也不知道的种种原因,一直没有开始去学网络编程,直到今天偶然的机会接触了Socket。所以整理了一个简单的demo。

注意事项

在新建一个mfc工程的时候一定要 勾选“windows套接字”

20160223225353

服务端(server)

在这里哀差闷是创建了一个基于对话框的mfc程序,在点击Start Listening按钮后,就开始侦听某一端口,当有客户端连接时,弹出提示对话框“有连接到来”

20160223230113

关键源码参考:

// TODO:  在此添加控件通知处理程序代码
	
	//socket
	//************套接字初始化*******
	WSAData wsadata;
	bool bRet = false;
	do{
		if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))
			break;
		if (2 != LOBYTE(wsadata.wVersion) || 2 != HIBYTE(wsadata.wVersion))
			break;
		//***********套接字初始化完成*******

		//IP and 端口
		//获取一个套接字
		SOCKET sock_server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
		sockaddr_in addr_server = { 0 };
		addr_server.sin_family = AF_INET;
		addr_server.sin_port = htons(18080);

		//给获取的套接字 绑定IP和端口
		bind(sock_server, (SOCKADDR*)&addr_server, sizeof(addr_server));
		listen(sock_server, SOMAXCONN);//监听

		SOCKET socket_client = accept(sock_server, nullptr, nullptr);
		MessageBoxW(L"有连接到来"); //有客户端连接时提示

		bRet = true;
	} while (false);

客户端(Client)

同样是创建一个基于对话框的mfc程序,点击“Connect Server”按钮后连接服务端,服务端提示有连接到来。

关键源码参考

// TODO:  在此添加控件通知处理程序代码
	//socket
	//************套接字初始化*******
	WSAData wsadata;
	bool bRet = false;
	do{
		if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))
			break;
		if (2 != LOBYTE(wsadata.wVersion) || 2 != HIBYTE(wsadata.wVersion))
			break;
		//***********套接字初始化完成*******

		SOCKET sock_connect = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

		sockaddr_in addr_server = { 0 };
		addr_server.sin_family = AF_INET;
		addr_server.sin_port = htons(18080);

		//指定连接IP
		addr_server.sin_addr.S_un.S_addr = inet_addr("121.42.48.161");

		connect(sock_connect, (SOCKADDR*)&addr_server, sizeof(addr_server));

		bRet = true;
	} while (false);

风雨兼程路,雨雪初霁时