`
pwrd
  • 浏览: 8638 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C++学习-Socket入门实验

C++ 
阅读更多
Server端代码:
#include <winsock2.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
#include <vector>
#define SIZE_BUFFER 200
int main(){
	WSAData wsadata;
	WSAStartup(MAKEWORD(2,0),&wsadata);
	SOCKET ssocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建一个TCP的Socket,但是没有绑定
	struct sockaddr_in server;
	server.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	server.sin_family = AF_INET;
	server.sin_port = htons(25000);//创建一个端口地址,指定地址和端口号
	 
	if(bind(ssocket,(sockaddr*)&server,sizeof(sockaddr_in)) == SOCKET_ERROR){
		std::cout<<"error bind"<<std::endl;
	}//绑定TCP Socket到指定的端口地址
	if(listen(ssocket, 4) == SOCKET_ERROR){
		std::cout<<"listen error"<<std::endl;
	}

	fd_set read_fdset;//读文件描述符
	std::vector<int> sockets;//读端口的集合,每监听到一个请求,就会新建一个端口,并且存放到该集合中
	
	while(true){
		FD_ZERO(&read_fdset);
		FD_SET(ssocket,&read_fdset);
		int n = select(0,&read_fdset,NULL,NULL,0);
		if(FD_ISSET(ssocket,&read_fdset)){//如果监听端口接收到了读的请求,也就是客户端发起了请求连接
			SOCKET s = accept(ssocket,NULL,0);//创建一个新的端口
			if(n!=SOCKET_ERROR){
				sockets.push_back(s);
				FD_SET(s,&read_fdset);//将当前端口设置到FD_READ中
			}
		}

		for(int i=0;i<sockets.size();i++){//对每一个接收端口查看是否有数据接收
			char buffer[SIZE_BUFFER];
			memset(buffer,0,SIZE_BUFFER);
			int len = 0;
			if((len = recv(sockets[i],buffer,SIZE_BUFFER,0))>0){
				printf("recv size = %d, and msg = %s\n",len,buffer);
			}//len:0代表客户端连接了连接,负值代表连接出错,正值代表接收数据的长度
			else if(len == 0){//客户端断开连接,删除集合
				sockets.erase(sockets.begin()+i);
			}
			
		}
	}
	system("pause");
	WSACleanup();
	return 0;

}


Client端代码:
#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main(){
	WSADATA wdata;
	WSAStartup(MAKEWORD(2,0),&wdata);
	SOCKADDR_IN addr;
	addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	addr.sin_family = AF_INET;
	addr.sin_port = htons(25000);
	SOCKET cons = socket(AF_INET,SOCK_STREAM,0);
	//bind(cons,(sockaddr*)&addr,0);
	
	SOCKET s = connect(cons,(sockaddr*)&addr,sizeof(SOCKADDR_IN));
	if( s == SOCKET_ERROR ){
		std::cout<< s << std::endl;
	}
	fd_set readset,writeset,exceptset;
	FD_ZERO(&writeset);
	FD_SET(s,&writeset);
	while(true){
		select(0,&readset,&writeset,&exceptset,0);
		if(FD_ISSET(s,&writeset)){
			
			int size = send(cons,"hello",6,0);
			std::cout<<"send msg size = "<<size<<std::endl;
			closesocket(s);
			WSACleanup();
			break;
		}
	}
	system("pause");
	WSACleanup();
	return 0;
}
分享到:
评论

相关推荐

    一个使用C++的HPSocket完整的demo,Tcp/Udp协议可转换

    HpSocket的demo,完整可运行,去除多余函数,只需将ClientDlg.h和ServerDlg.h中的Tcp改为Udp便可轻松改变协议

    基于QT - SOCKET 的 C++ 实现矩阵压力数据采集及压力云图现实。.zip

    基于QT - SOCKET 的 C++ 实现矩阵压力数据采集及压力云图现实。 基于QT - SOCKET 的 C++ 实现矩阵压力数据采集及压力云图现实。 基于QT - SOCKET 的 C++ 实现矩阵压力数据采集及压力云图现实。 基于QT - SOCKET 的 ...

    HPSocket C++控制台版DEMO.rar

    此DEMO使用标准C++控制台来实现,对于刚接触网络编程的新手来说可以更容易跟踪理解 HP-Socket 组件的工作流程,从而快速移植到自己的项目中。 此DEMO采用PACK模型,包含服务器及客户端的实现。PACK模型可以让你不用...

    让你的HpSocket Pull支持同步(应答式)操作

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。...

    C++ TCP-socket端口通讯server+client

    用C++编写的关于 TCP-socket端口通讯的实例,里面包含服务器端和客户端server+client,里面有大量的注释,通俗易懂

    HP-Socket-V5.4

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等...

    mirrors-hp-socket-master.zip_java udp_python udp_socket_socket 高

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程...

    HP-Socket-master.zip

    为了让使用者能方便快速地学习和使用HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量Demo示例(如:PUSH模型示例、PULL模型示例、PACK模型示例、性能测试示例以及其它编程语言示例)。HP-Socket...

    HP-Socket V3.2.1

    HP-Socket 是一套通用的高性能 TCP/UDP Socket 框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口...

    HP-Socket开发TCP Server

    HP-Socket开发TCP Server。 简单地TCP Server,示例如何使用HP-Socket

    ---C++入门---

    C++入门C++入门C++入门C++入门C++入门C++入门

    C++初学者教程 C++编程-菜鸟入门(清晰版)

    C++初学者教程 C++编程-菜鸟入门(清晰版)

    HP-Socket网络通信框架开发指南.zip

    为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思 想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能测试示例以及其它编程语言示例)。

    HP-Socket网络通信框架开发指南

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、 ...信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。...为了让使用者能方便快速地学习和使用 HP-Socket

    Microsoft Visual C++ 2015-2022 Redistributable (x64)

    Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.31.31103

    HP-Socket通讯框架官方教程

    HP-Socket通讯框架官方教程

    HP-Socket-v3.2.1-rc3源码

    HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E、Java 等编程语言开发接口。HP-Socket ...

    HP-Socket下载

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口...

    Microsoft Visual C++ 2015-2019 运行库合集,包含32位64位

    Microsoft Visual C++ 2015-2019 运行库合集,32位64位都有,解决缺失dll包问题。

    HP-Socket 网络通信框架开发指南

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、 客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通 信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等...

Global site tag (gtag.js) - Google Analytics