socket动态库项目

XSocket.h

class XSocket
{
     
public:
	bool Bind(unsigned short port);
protected:
	int sock = 0;
};

XSocket.cpp

#include "XSocket.h"
#include 
#include 
#include 
#include //头文件中尽量不要引用,以后要做跨平台应用,不同平台的头文件引用可能不一样.h文件就变得不通用了
#include 
using namespace std;

XSocket::Bind(unsigned short port)
{
     
	if(this->sock){
     
		close(this->sock);//每次创建的时候先进行释放
	}

	//建立链接,三次握手的信息会存在这里,当读这个socked的时候会获取与用户建立的链接
	this->sock = socked(AF_INET,SOCK_STREAM,0);//获取文件id,win里面的句柄
	
	if(this->sock <= 0 ){
     
		cout << "creat socket faild.(可能资源用尽)" << endl;
		return false;
	}
	
	//bing->地址填充(协议、IP、port),告诉系统ip+port的数据与某一个socked关联并写到写个socked文件中
	sockaddr_in saddr;
	saddr.sin_family = AF_INET;//协议类型
	saddr.sin_port = htons(port);//转换为网络传输字节序
	saddr.sin_addr.s_addr = htonl(0);//long,0表示任何地址都接受
	int re = bind(sock,(sockaddr*)&saddr,sizeof(saddr));//c语言没有重载,只能通过同一个接口sockaddr,需要强转不同类型,最后通过size来判断绑定的是什么类型
	
	if(re == -1){
     
	cout << "bing faild." << endl;
	return false;
	}
	
	//以上只是告诉,但是并没有开始写,从listen开始发过来的数据开始写
	listen(sock,100);//参数2:未完成队列的大小,非并发数量,理解为缓存最多放多少个,一瞬间能够处理的数量,假设100,但是进来了1000,还有900个都会被扔掉:https://www.cnblogs.com/ztteng/p/5147156.html

	cout << "bing port" << port << "success" << endl;

	return true;
}

makefile

OUT=libxsocket.so
CC=$(g++)
$(OUT):XSocket.cpp XSocket.h
	$(CC) $+ -O $@ -shared -fPIC -g -std=c++11#c++11之前类中的成员变量不能赋初值,只能在构造函数中

你可能感兴趣的:(socked,socket)