Exemplo n.º 1
0
	void UdpReceiveThread::Main() {
		SocketThreadOperation *op = mSocketThreadOperation;
		UdpSocket *s = (UdpSocket*)op->mSocket;
		ErrorType error;
		StopWatch sw;
		sw.Start();
		while (!ShouldEnd()) {
			error = s->Receive(op->mIPAddress, &op->mByteStream,
				Math::ClampLong(op->mTimeoutMS - sw.GetElapsedMilliseconds(),
					0L, 16L));
			if (0L == op->mTimeoutMS ||
				(error && kErrorTimedOut != error) ||
				(0L < op->mTimeoutMS &&
				sw.GetElapsedMilliseconds() >= op->mTimeoutMS))
			{
				if (error)
					Error::Throw(error, String("[%s(%p, %p)]",
						FastFunctionName, this, op));
				s->OnReceive(op->mID, op->mIPAddress, op->mByteStream, error);
				op->mByteStream.Clear();
				sw.Reset();
				sw.Start();
				continue;
			}
		}
	}
Exemplo n.º 2
0
int main(){
	if(!winSockDll.Init()){
		std::cout<<"Couldn't load winsock"<<std::endl;
		system("pause");
		return 1;
	}
	connections = (Address*)calloc(64, sizeof(Address));

	addr = Address("127.0.0.1", 2222);
	sConnect = UdpSocket();
	sConnect.Bind(addr);
	std::cout << "Server started..." << std::endl;

	char* buffer = new char[512];
	bool clientexist = false;
	while(true){
		clientexist = false;
		ZeroMemory(buffer, 512);
		sConnect.Receive(buffer, 512, &storeAddr);
		for(int i = 0; i < Counter; i++){
			if(storeAddr.Equals(connections[i])){
				std::cout << "Client["<<i<<"]: "<<buffer<<std::endl;
				clientexist = true;
			}
		}
		if(!clientexist){
			connections[Counter] = storeAddr;
			std::cout<<"New Client: "<<Counter<<std::endl;
			std::cout << "Client["<<Counter<<"]: "<< buffer << std::endl;
			Counter++;
		}
	}

	winSockDll.Cleanup();
	return 0;
}
Exemplo n.º 3
0
Arquivo: api.cpp Projeto: datee/hxudp
value _UdpSocket_Receive(value a, value b, value c) {
	UdpSocket* s = (UdpSocket*) val_data(a);
	return alloc_int(s->Receive(buffer_data(val_to_buffer(b)), val_int(c)));
}